1

这可能是一个重复的问题,因为我找不到有解释的问题。

我有一个数据框,我想删除所有具有 999.9 值的行。但不知何故做不到。

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).any(1)]
print(df1)

在此处输入图像描述

在这种情况下,我想删除第一行和第二行。

4

2 回答 2

1

尝试:

df1 = pd.DataFrame({'a':[999.9,999.9,1,3,2], 'b':[999.9,1,999.9,1, 2]})
print(df1[~(df1==999.9).any(axis=1)])

输出:

     a    b
3  3.0  1.0
4  2.0  2.0
于 2021-10-09T13:24:26.460 回答
1

您签df1 != 999.9入此检查仅删除第一行,因为对于其他行,您有该列!= 999.9

试试这个:

>>> mask = (df1 == 999.9).any(1)
>>> df1[~mask]


# for more explanation

>>> df1 == 999.9
       a    b
0   True    True
1   True    False
2   False   True
3   False   False
4   False   False

在您的解决方案中:

>>> (df1 != 999.9)
       a    b
0   False   False
1   False   True
2   True    False
3   True    True
4   True    True

>>> (df1 != 999.9).any(axis = 1) # for check rows
0    False
1     True
2     True
3     True
4     True
dtype: bool

>>> (df1 != 999.9).any(axis = 0) # for check columns
a    True
b    True
dtype: bool
于 2021-10-09T13:24:52.647 回答