当所有单元格为零或 nan 时删除所有行

b10*_*101 2 python rows pandas

当该行的每列中的所有单元格都为 0 或“nan”(ID 列除外,这将是一些唯一值)时,我需要从数据框中删除所有行,我已经尝试了下面的命令,但没有运气。预期的输出也粘贴在下面。先感谢您!

数据

df = pd.DataFrame({'id':[1,2,3,4],'a':[0,0,0,1], 'b':[0,1,'nan',1], 'c':['nan',1,0,1]})

    id  a   b   c
0   1   0   0   nan
1   2   0   1   1
2   3   0   nan 0
3   4   1   1   1
Run Code Online (Sandbox Code Playgroud)

命令

df.loc[df[(df != 0) & (df != ('nan'))].all(axis=1)]
Run Code Online (Sandbox Code Playgroud)

预期产出

    id  a   b   c
0   2   0   1   1
1   4   1   1   1
Run Code Online (Sandbox Code Playgroud)

Rav*_*h13 6

使用您显示的示例,请尝试执行以下操作。使用Pandas 的drop,isin函数。

df[~df.drop('id', 1).isin([0,'nan']).all(1)]
Run Code Online (Sandbox Code Playgroud)

输出如下:

   id  a  b  c
1  2   0  1  1 
3  4   1  1  1
Run Code Online (Sandbox Code Playgroud)

解释:

  • df.drop('id', 1).isin([0,'nan']).all(1):使用drop函数在轴 1 上删除来删除列 id,然后检查其值是否存在于 0 或 nan 中,然后使用all检查所有值是否为 TRUE,然后给出 true。
  • 然后使用~反转上述掩码的输出以从 DataFrame 中获取预期输出。