【发布时间】:2020-12-03 20:47:20
【问题描述】:
我在 pandas 数据框中有一个数字列表,我正在尝试使用 lambda 函数 + 列表推导从这些列表中删除值。
col 1 col2
一个 [-1, 2, 10, 600, -10]
b [-0, -5, -6, -200, -30]
c .....
等等
df.col2.apply(lambda x: [i for i in x if i>= 0]) #just trying to remove negative values
数字总是递增的,可以全为负数、全为正数或混合。列表大约有 200 个项目,都是整数。
我收到此错误:
TypeError: 'numpy.float64' object is not iterable
编辑:当我这样做时,它可以工作
[i for i in df[col2][#] if i >= 0] 我想我可以通过一个 for 循环来运行它。虽然看起来很慢
Edit2:用新鲜的眼光看待它。事实证明,该列并不完全由列表组成,有一些浮点值分布在各处(duh)。一旦我纠正了上面的代码按预期工作,合并发生了一些奇怪的事情。感谢您的帮助!
【问题讨论】:
-
错误说明了您的问题。尝试将
lambda设为变量,将列转换为列表,然后将其传递。 -
这个错误对我来说毫无意义。 lambda x 是一个列表,为什么会有类型错误?如果我这样做:``` [i for i in df[col2][#] if i >= 0] ``` 这行得通
-
第 2 列中的每个项目都是数字列表,还是有任何实例是单个浮点数而不是列表?
-
我认为你错过了 apply 的工作原理
-
查看掩码和条件
标签: python pandas numpy lambda