Python 提取仅包含NaN和0的行

Python 提取仅包含NaN和0的行,python,pandas,nan,sklearn-pandas,Python,Pandas,Nan,Sklearn Pandas,我有一个dataframe,它在所有列的某些行中包含NaN和0。我试图提取这样的行,以便进一步处理它们。此外,这些列中的一些是object,另一些是float。我正在尝试使用下面的代码来提取这样的行,但是由于列是对象,所以它没有给我想要的结果 现在,我可以通过将一些任意值替换为NaN并在.isin语句中使用它来解决这个问题,但是它也会更改我的列的数据类型,我必须将它们转换回来 有人能帮我解决这个问题吗。 谢谢 预期产出: a b 0 NaN 0.0 1 0 NaN 2

我有一个dataframe,它在所有列的某些行中包含NaN和0。我试图提取这样的行,以便进一步处理它们。此外,这些列中的一些是object,另一些是float。我正在尝试使用下面的代码来提取这样的行,但是由于列是对象,所以它没有给我想要的结果

现在,我可以通过将一些任意值替换为NaN并在.isin语句中使用它来解决这个问题,但是它也会更改我的列的数据类型,我必须将它们转换回来

有人能帮我解决这个问题吗。 谢谢

预期产出:

     a   b
0   NaN 0.0
1   0   NaN
2   NaN NaN
实际产量:

     a  b
0   NaN 0.0
改变

df_all_empty = df[(df.isnull()|df.isin([0])).all(1)]

下面的代码将允许您选择这些行

df_sel = df.loc[(df.a.isnull()) | \
                (df.b.isnull()) | \
                (df.a==0)       | \
                (df.b==0)           ]
如果要在这些行中设置列“a”,例如-9999,可以使用:

df.loc[(df.a.isnull()) | \
       (df.b.isnull()) | \
       (df.a==0)       | \
       (df.b==0)           , 'a'] = -9999
有关参考,请参阅中的官方文件


您可以使用
df.query
,以及所描述的技巧(通过检查值是否等于自身来比较NaN)

这样写:

df.query("(a!=a or a==0) and (b!=b or b==0)")
输出为:

     a    b
0  NaN  0.0
1    0  NaN
2  NaN  NaN

这个数据帧的
df.isin(values)
矩阵是[0真-真,1真-假,2真-假,3假-假,4假-假]你有什么原因吗?我不明白为什么1,b中的值为False,所以我假设使用
isin
与NaNs进行比较是错误的看起来像
np.NaN!=np.NaN
在numpy中。因此最好使用
df[(df.isnull()| df.isin([0])).all(1)]
     a    b
0  NaN  0.0
1    0  NaN
2  NaN  NaN