使用pandas

时间:2018-01-11 17:53:08

标签: python pandas dataframe

我正在开发一个项目,该项目使用公共IMDB数据集,并希望从每个子字符串中提取类型数据,并将此信息存储在单独的列中。这就是我现在拥有的。

电流: ID类型 1995 [{“id”:28,“name”:“Action”},{“id”:12,“name”:“Adventure”},{“id”:14,“name”:“Fantasy”}, {“id”:878,“name”:“科幻小​​说”}]

我正在努力实现的目标 将数据分成每个类型,其对应于电影ID,例如电影ID 1995年:动作,冒险,幻想,科幻小说

总而言之,我有多个包含我想要的字符串,我想为每个ID提取相关数据(流派)。

我如何在python中执行此操作,我一直在玩大熊猫,但目前只能获得一种类型的True / false。

CSV文件here

import pandas as pd
import numpy as np
import os
import re
import matplotlib.pyplot as plt
# Order of the Column headers for the re-arranged data

Genres = ['Action','Adventure','Biography','Comedy','Crime','Documentary','Drama','Family','Fantasy',
          'Film-Noir''History','Horror','Musical','Mystery','News','Romance','Sci-Fi','Short','Sport',
          'Thriller','War','Western']

os.chdir('C:\\Users\parmi\Documents\Python Scripts')
org_data = pd.read_csv('tmdb_5000_movies.csv')


film_id = pd.DataFrame(org_data)['id']
genre_data = pd.DataFrame(org_data)['genres']

genre_data= genre_data.str.extract(Genre)
genre_combined = pd.concat([film_id,genre_data], axis=1)
genre_combined.to_csv('genre_data2.csv')

1 个答案:

答案 0 :(得分:1)

首先,加载数据 -

df = pd.read_csv('tmdb_5000_movies.csv')

接下来,genres包含JSON数据,因此请将其加载为一列dicts -

v = df.genres.apply(json.loads)

接下来,使用np.repeat -

展平您的数据
df = pd.DataFrame(
{
    'id' : df['id'].values.repeat(v.str.len(), axis=0),
    'genre' : np.concatenate(v.tolist())
})

通过从每个字典中检索genre属性,将name从一列dicts转换为一列字符串。

df['genre'] = df['genre'].map(lambda x: x.get('name'))

最后,使用str.get_dummies -

计算一个热门编码
ohe = df.set_index('id')\
        .genre.str.get_dummies()\
        .sum(level=0)\

ohe.head(10)

        Action  Adventure  Animation  Comedy  Crime  Documentary  Drama  \
id                                                                        
19995        1          1          0       0      0            0      0   
285          1          1          0       0      0            0      0   
206647       1          1          0       0      1            0      0   
49026        1          0          0       0      1            0      1   
49529        1          1          0       0      0            0      0   
559          1          1          0       0      0            0      0   
38757        0          0          1       0      0            0      0   
99861        1          1          0       0      0            0      0   
767          0          1          0       0      0            0      0   
209112       1          1          0       0      0            0      0   

        Family  Fantasy  Foreign  History  Horror  Music  Mystery  Romance  \
id                                                                           
19995        0        1        0        0       0      0        0        0   
285          0        1        0        0       0      0        0        0   
206647       0        0        0        0       0      0        0        0   
49026        0        0        0        0       0      0        0        0   
49529        0        0        0        0       0      0        0        0   
559          0        1        0        0       0      0        0        0   
38757        1        0        0        0       0      0        0        0   
99861        0        0        0        0       0      0        0        0   
767          1        1        0        0       0      0        0        0   
209112       0        1        0        0       0      0        0        0   

        Science Fiction  TV Movie  Thriller  War  Western  
id                                                         
19995                 1         0         0    0        0  
285                   0         0         0    0        0  
206647                0         0         0    0        0  
49026                 0         0         1    0        0  
49529                 1         0         0    0        0  
559                   0         0         0    0        0  
38757                 0         0         0    0        0  
99861                 1         0         0    0        0  
767                   0         0         0    0        0  
209112                0         0         0    0        0