Pandas: создание фиктивных переменных из значений внутри столбца - PullRequest
0 голосов
/ 27 марта 2020

У меня есть фрейм данных со столбцом с именем Actors, где каждая ячейка содержит строку, подобную этой "Abigail Breslin, Greg Kinnear, Paul Dano, Alan Arkin". Я бы sh разделил эту строку на (","), чтобы в ячейке содержался список каждого актера, т.е. ["Abigail Breslin", "Greg Kinnear, "Paul Dano, "Alan Arkin"], чтобы я мог создать фиктивные переменные для каждого уникального актера. Я еще нашел решение, которое фактически разделяет строку и отправляет соответствующее имя актера в новый столбец.

Любая помощь будет принята с благодарностью :)

Мой Dataframe (df) выглядит так это

Title (Object)| Actors (Object)                                              |  Year (Object)    
Pulp Fiction  | Bruce Willis, Amanda Plummer, Laura Lovelace, John Travolta  |  1994
Fight Club    | Edward Norton, Brad Pitt, Helena Bonham Carter, Meat Loaf    |  1999

Моя цель состоит в том, чтобы мой фрейм данных выглядел следующим образом

Title (Object)| Bruce Willis | Amanda Plummer | Laura Lovelace | John Travolta | Edward Norton | Year   
Pulp Fiction  |       1      |        1       |       1        |      1        |       0       | 1994
Fight Club    |       0      |        0       |       0        |      0        |       1       | 1999

Я пытался

import pandas as pd 

data = 'Imdb_datajson(Cleaned).csv'

df = pd.read_csv(data)
    list_of_unique_actors = df.Actors.unique().tolist()
    list_of_unique_actors

    newlist = []
    for actor in list_of_unique_actors:
        actor = actor.split(",")
        newlist.extend(actor)

И получил эту ошибку

    AttributeError                            Traceback (most recent call last)
<ipython-input-48-ae50a804fe05> in <module>
      5 newlist = []
      6 for word in list_of_unique_actors:
----> 7     word = word.split(",")
      8     newlist.extend(word)
      9 return newlist

AttributeError: 'float' object has no attribute 'split'

1 Ответ

0 голосов
/ 27 марта 2020

Использование pd.get_dummies()

# sample data
s = """Title (Object)|Actors (Object)|Year (Object)
Pulp Fiction|Bruce Willis, Amanda Plummer, Laura Lovelace, John Travolta|1994
Fight Club|Edward Norton, Brad Pitt, Helena Bonham Carter, Meat Loaf|1999"""
# read csv
df = pd.read_csv(StringIO(s), sep='|')

# split your string of actors into a list
df['Actors (Object)'] = df['Actors (Object)'].str.split(', ')
# set the title and year as index
df = df.set_index(['Title (Object)', 'Year (Object)'])
# get_dummies
dummy_df = pd.get_dummies(df['Actors (Object)'].apply(pd.Series).stack()).sum(level=[0,1])


                               Edward Norton  Amanda Plummer  Brad Pitt  \
Title (Object) Year (Object)                                              
Pulp Fiction   1994                        0               1          0   
Fight Club     1999                        1               0          1   

                              Bruce Willis  Helena Bonham Carter  \
Title (Object) Year (Object)                                       
Pulp Fiction   1994                      1                     0   
Fight Club     1999                      0                     1   

                              John Travolta  Laura Lovelace  Meat Loaf  
Title (Object) Year (Object)                                            
Pulp Fiction   1994                       1               1          0  
Fight Club     1999                       0               0          1  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...