Pandas:生成列表的应用操作不可调用

时间:2018-01-05 10:10:04

标签: python pandas

我有一个大型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),任何人都知道我做错了什么?

2 个答案:

答案 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()]))