我从Kraggle下拉了IMDB数据集。我将两个文件合并在一起,并希望按流派探索收视率。体裁单元格包含该行的所有体裁关键字。我为每种类型(即恐怖,戏剧,喜剧等)创建了一个新列,并希望在该类型与相应列相匹配的每一行中添加一个“ x”。 我试图拆分类型列,然后遍历每一行,在相应的相应列中放置一个“ x”,但是我似乎无法使其正常运行。在每一行的每一列中都会有一个“ x”,或者对于每一行列出的第一个流派,我都会得到一个“ x”。打击是细胞读取方式的图像。
这是我目前正在尝试的方法。
movies = pd.read_csv('IMDb movies.csv')
ratings = pd.read_csv('IMDb ratings.csv')
imdb = pd.merge(movies, ratings , on=['imdb_title_id'], how='inner')
def genre_fill(n):
list = imdb.genre.str.split(',')
for i in list:
if n == 'Western':
imdb['Western'] = 'x'
if n == 'Drama':
imdb[ 'Drama'] = 'x'
if n == 'Fantasy':
imdb['Fantasy'] = 'x'
if n == 'Comedy':
imdb['Comedy'] = 'x'
if n == 'Action':
imdb['Action'] = 'x'
if n == 'Adventure':
imdb['Adventure'] = 'x'
if n == 'Biography':
imdb['Biography'] = 'x'
if n == 'Romance':
imdb['Romance'] = 'x'
if n == 'Mystery':
imdb['Mystery'] = 'x'
if n == 'Crime':
imdb['Crime'] = 'x'
if n == 'Film-Noir':
imdb['Film-Noir'] = 'x'
if n == 'Music':
imdb['Music'] = 'x'
if n == 'Horror':
imdb['Horror'] = 'x'
if n == 'Musical':
imdb['Musical'] = 'x'
if n == 'Thriller':
imdb['Thriller'] = 'x'
if n == 'War':
imdb['War'] = 'x'
if n == 'Sci-Fi':
imdb['Sci-Fi'] = 'x'
if n == 'Sport':
imdb['Sport'] = 'x'
if n == 'Family':
imdb['Family'] = 'x'
if n == 'History':
imdb['History'] = 'x'
for value in imdb['genre']:
genre_fill(value)
这是我的第一个python项目。任何建议表示赞赏。
答案 0 :(得分:0)
我认为您想要类似的东西
def genre_fill(n):
list = n.str.split(',')
for i in list:
if i == 'Western':
imdb['Western'] = 'x'
if i == 'Drama':
imdb[ 'Drama'] = 'x'
#etc...
答案 1 :(得分:0)
这是一种方法,希望对您有所帮助。
首先,从genre
列中提取所有类型。
cols = set([i.split(',')[0] for i in df.genre.tolist()])
print(cols)
cols
如下所示:
{'Action',
'Adult',
'Adventure',
'Animation',
'Biography',
'Comedy',
'Crime',
'Documentary',
'Drama',
'Family',
'Fantasy',
'Film-Noir',
'History',
'Horror',
'Music',
'Musical',
'Mystery',
'Romance',
'Sci-Fi',
'Sport',
'Thriller',
'War',
'Western'}
在df中创建列:
for c in cols:
df[c] = 0
填写值:
for index, row in df.iterrows():
for g in row['genre'].split(', '):
df.at[index,g] = 1
此代码将为每个类型创建一列,并用1填充值。 这不是最好的方法,因为我正在使用循环。但是对于这个数据集来说还不错!
结果将是这样的:
id Drama War Animation ...
0 1 0 0 ...
1 0 1 1 ...
请告诉我它是否对您有用。
答案 2 :(得分:0)
我认为最好的方法是不要输入“ x”或任何字母,而应该输入1或0。稍后进行一些计算会更容易。
也就是说,我将执行以下操作(为此,您需要以导入“ pandas”的方式导入numpy库->将numpy导入为np):
genre_list = {i.strip() for i in np.hstack(df['genre'].map(lambda x: x.split(',')))}
for i in genre_list:
df[i] = df['genre'].map(lambda x: 1 if x.find(i) > 0 else 0)
我希望它有用,让我知道它是否有效。