Python Pandas:如何删除DataFrame中包含特定值的所有行(代码调试)
解决DataFrame删除含指定值行的问题
我来帮你搞定这个问题!你的需求是删除所有包含999.9值的行,但当前代码的逻辑刚好搞反了,咱们一步步理清:
原代码的问题
你写的(df1 != 999.9).any(1)会生成一个布尔序列,逻辑是:只要某一行里有任意一个元素不等于999.9,就标记为True。这意味着它会保留那些"不全是999.9"的行,但你想要的是删除"任何一个元素是999.9"的行,也就是只保留"所有元素都不等于999.9"的行。
正确的解决方案
这里有两种简洁的写法,都能实现你的需求:
方法1:用all()替代any()
all(axis=1)会检查每一行的所有元素是否都满足条件,正好符合我们"全不是999.9才保留"的要求:
import pandas as pd df1 = pd.DataFrame({'a':[999.9,999.9,1,3,2], 'b':[999.9,1,999.9,1, 2]}) df1 = df1.loc[(df1 != 999.9).all(axis=1)] print(df1)
方法2:反向筛选(标记要删除的行再取反)
先找出所有包含999.9的行,然后用~取反保留剩下的行:
import pandas as pd df1 = pd.DataFrame({'a':[999.9,999.9,1,3,2], 'b':[999.9,1,999.9,1, 2]}) df1 = df1[~df1.isin([999.9]).any(axis=1)] print(df1)
运行结果
两种方法都会输出你期望的结果:
a b 3 3.0 1.0 4 2.0 2.0
也就是成功删除了所有包含999.9的行(原DataFrame的前3行)。
内容的提问来源于stack exchange,提问作者aman-aman
相关产品推荐
相关产品推荐

