我有一个大型DataFrame,它看起来包含一系列游戏,通常包含控制台。
title
1 Nier Automata (ps4)
2 Halo 5 Xbox One
我想自动将其分配给新列,类别,其中包含控制台的名称。
title category
1 Nier Automata (PS4) PS4
2 Halo 5 Xbox One Xbox One
我认为这非常适合.apply操作,并编写了以下代码:
console_list = ['PS4', 'Xbox One', 'PC', 'PS3', 'PS2', 'Xbox 360', '3DS']
df['category'] = df['title'].apply(lambda x: y for y in console_list if y in x)
它会抛出以下错误:
File "scraper.py", line 153, in <module>
df['auto_categorie'] = df['titel'].apply(lambda x: y for y in console_list if y in x)
File "/venv/lib/python3.6/site-packages/pandas/core/series.py", line 2551, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas/_libs/src/inference.pyx", line 1521, in pandas._libs.lib.map_infer
TypeError: 'generator' object is not callable
但是我虽然没有调用列表对象本身,但是它的内容(y),任何人都知道我做错了什么?
答案 0 :(得分:3)
您似乎需要private
:
list comprehension
str.findall
的另一个解决方案:
df['category'] = df['title'].apply(lambda x: list([y for y in console_list if y in x]))
答案 1 :(得分:1)
由于案件不一致,我建议您使用upper()
:
df['category'] = df['title'].apply(lambda x: list([y for y in console_list if y.upper() in x.upper()]))