我的dataframe由每个单元格中的列表组成,我想从所有这些列表中删除一个特定的值,而不对整个dataframe使用for循环
TIN PIN column ......
0 [1,2,val] [0,1] [val, t, z] ......
1 [2,val,4] [14,val] [b, a, val] ......
........
这些瓦尔是字符串格式的,我想删除所有这些,它们存在于其中一些列表中,而不存在于其他列表中...
我试过用.apply(lambda x: x.remove('nan'|'NaT')
,因为瓦尔是字符串格式的nan或NaT,即'nan'或'NaT'而不是空值.....
它给了我一个错误说,此外,我认为我的逻辑本身是错误的,因为我认为它是试图删除x,而不是什么是指定的。
5条答案
按热度按时间umuewwlo1#
也许这就是你需要的,我使用dataframe方法
applymap
为dataframe中的所有单元格应用lambda函数,并使用Pythonfilter
函数删除变量nan_set
中不需要的元素。输入:
输出:
kx5bkwkv2#
你不能像你想的那样使用
remove
,因为如果找到了值,它会返回None
,如果没有,它会引发ValueError
。一种方法是使用嵌套的apply:输出:
请注意,从性能方面考虑,最好使用
applymap
(大约快35%),如@LuanNguyen的回答所述:或者使用一组值来删除:
ctrmrzij3#
可以将apply与自定义函数一起使用。
(you可以在一行中完成大部分代码,但很难理解):
输入:
输出:
mec1mxoz4#
您可以使用两个嵌入的“for”循环来实现这一点,一个循环用于遍历df中的单元格,另一个循环用于遍历单元格中的列表元素。
“cell”迭代df单元格,listitems迭代单元格中的列表元素。n表示列表中的第n个元素。IOW如果n = 3,则它将删除列表的第4个元素(记住0是技术上的第一个元素)。
blmhpbnm5#
可以通过将每行视为一个系列来使用
apply
将其应用于
df
,将轴设置为1
,以便在列上执行操作