我尝试重新编码以列表格式组织的数据框列中的值。我知道如何替换数据帧列中的字符串值,但我正在努力解决如何在列表中执行此操作。
以下是我的数据片段:
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'
答案 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]