重新编码dataframe列中的列表值

时间:2017-04-14 14:49:53

标签: python pandas

我尝试重新编码以列表格式组织的数据框列中的值。我知道如何替换数据帧列中的字符串值,但我正在努力解决如何在列表中执行此操作。

以下是我的数据片段:

cl_mem

例如,我想将所有罪行重新编入“惊悚片”和“传记至历史记录”。

我知道以下内容适用于替换字符串值

{0: '[Crime, Drama]',
 1: '[Crime, Drama]',
 2: '[Crime, Drama]',
 3: '[Action, Crime, Drama, Thriller]',
 4: '[Crime, Drama]',
 5: '[Biography, Drama, History]',
 6: '[Crime, Drama]',
 7: '[Adventure, Drama, Fantasy]',
 8: '[Western]',
 9: '[Drama]'}

但如何修改列表?

谢谢!

编辑: 用于创建此数据框的代码(使用从IMDB数据库中提取的数据)是:

df.loc[df['genre']=='Crime']='Thriller'

2 个答案:

答案 0 :(得分:0)

假设这被正确格式化为DataFrame中的列表。您可以编写一个接受行的函数,并将类型名称更改映射作为参数并将其应用于DataFrame。例如

name_map = {'Crime': 'Thriller', 'Biography': 'History'}
def change_names(row, name_map):
    for name in name_map:
        if name in row.genre:
            row.genre[row.genre.index(name)] = name_map[name]
    return row
df = df.apply(lambda row: change_name(row, name_map), axis=1)

它没有矢量化,但它会完成工作。

答案 1 :(得分:0)

考虑使用列表理解进行更新。下面使用 Genre 列表的单列数据框。

df = pd.DataFrame({'Genre': [['Crime', 'Drama'],
                             ['Crime', 'Drama'],
                             ['Crime', 'Drama'],
                             ['Action', 'Crime', 'Drama', 'Thriller'],
                             ['Crime', 'Drama'],
                             ['Biography', 'Drama', 'History'],
                             ['Crime', 'Drama'],
                             ['Adventure', 'Drama', 'Fantasy'],
                             ['Western'],
                             ['Drama']]})    
print(df)
#                               Genre
# 0                    [Crime, Drama]
# 1                    [Crime, Drama]
# 2                    [Crime, Drama]
# 3  [Action, Crime, Drama, Thriller]
# 4                    [Crime, Drama]
# 5       [Biography, Drama, History]
# 6                    [Crime, Drama]
# 7       [Adventure, Drama, Fantasy]
# 8                         [Western]
# 9                           [Drama]

df['Genre'] = [['Thriller' if i=='Crime' else i for i in m] for m in df['Genre']]
print(df)
#                                  Genre
# 0                    [Thriller, Drama]
# 1                    [Thriller, Drama]
# 2                    [Thriller, Drama]
# 3  [Action, Thriller, Drama, Thriller]
# 4                    [Thriller, Drama]
# 5          [Biography, Drama, History]
# 6                    [Thriller, Drama]
# 7          [Adventure, Drama, Fantasy]
# 8                            [Western]
# 9                              [Drama]