为什么这种使用数据帧的方法是错误的?

时间:2017-10-05 08:52:43

标签: python pandas lambda apply series

我不知道为什么这个操作错了:

songs_genres = np.array(data['genre_ids'].apply(lambda x: int(v) for v in str(x).split('|')))

这是日志:

Traceback (most recent call last):
  File "FeatureEngineering.py", line 66, in <module>
    data = FeatureEncoding(data, train_dix, test_idx)
  File "FeatureEngineering.py", line 30, in FeatureEncoding
    songs_genres = np.array(data['genre_ids'].apply(lambda x: int(v) for v in str(x).split('|')))
NameError: global name 'x' is not defined

1 个答案:

答案 0 :(得分:0)

如果你使用类似的列表理解,那很明显:

>>> [lambda x: int(x) for _ in range(3)]
[<function __main__.<listcomp>.<lambda>>,
 <function __main__.<listcomp>.<lambda>>,
 <function __main__.<listcomp>.<lambda>>]

所以你传递给apply的是多个lambdalambda的数量取决于str(x).split('|')。但这失败了,因为当您将其传递给apply时,名称x尚未定义。这就是异常的原因。

你还没有说出你想做什么,但似乎需要这样的事情:

data['genre_ids'].apply(lambda x: [int(v) for v in str(x).split('|')])

这会为每个条目创建一个包含整数的列表。