我对python很新,在pandas&中使用DataFrame。来自电影数据库的numpy。其中一列注意到每个电影的主要演员用管道符号(|)分隔。我正在尝试找到一种方法来分割每个单独的演员,并将其列在自己的行中,并带有电影标题。我已经在我得到的结果下面添加了一个片段。
tmdb_data = pd.read_csv('tmdb-movies.csv')
cast_split = tmdb_data[['original_title', 'cast']]
df = pd.DataFrame(cast_split)
df.head()
预期输出:
original_title cast
0 Jursassic World Chris Patt
1 Jursassic World Bryce Dallas Howard
2 Jursassic World Irrfan Khan
答案 0 :(得分:1)
使用pop
+ split
+ stack
+ rename
+ reset_index
获取新Series
,然后join
使用原始版本:
tmdb_data = pd.DataFrame({'movie':['Jursassic World', 'Insurgent'],
'cast':['Chris Patt|Bryce Dallas Howard|Irrfan Khan',
'Shailene Woodley|Theo James']},
columns=['movie', 'cast'])
print (tmdb_data)
movie cast
0 Jursassic World Chris Patt|Bryce Dallas Howard|Irrfan Khan
1 Insurgent Shailene Woodley|Theo James
df1 = (tmdb_data.join(tmdb_data.pop('cast').str.split('|', expand=True)
.stack()
.reset_index(level=1, drop=True)
.rename('cast'))
.reset_index(drop=True))
print (df1)
movie cast
0 Jursassic World Chris Patt
1 Jursassic World Bryce Dallas Howard
2 Jursassic World Irrfan Khan
3 Insurgent Shailene Woodley
4 Insurgent Theo James
答案 1 :(得分:1)
首先投射为一个列表(原谅双关语!),然后通过numpy
重建数据帧:
import pandas as pd
import numpy as np
df = pd.DataFrame([['Jursassic World', 'Chris Patt|Bryce Dallas Howard']], columns=['movie', 'cast'])
df.cast = df.cast.str.split('|')
df2 = pd.DataFrame({'movie': np.repeat(df.movie.values, df.cast.str.len()),
'cast': np.concatenate(df.cast.values)})
# cast movie
# 0 Chris Patt Jursassic World
# 1 Bryce Dallas Howard Jursassic World