在列中拆分名称

时间:2018-01-30 07:40:10

标签: python pandas numpy

我对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()

Movie Title & Cast

预期输出:

    original_title                 cast
0  Jursassic World           Chris Patt
1  Jursassic World  Bryce Dallas Howard
2  Jursassic World          Irrfan Khan

2 个答案:

答案 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