我正在开发一个项目,该项目使用公共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')
答案 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