删除熊猫数据框中所有全为0或NA的所有行

问题描述 投票:0回答:2

展开Drop rows with all zeros in pandas data frame,我将如何编辑该解决方案以从仅包含0和NA的数据框中删除所有行。

我尝试过:

df.loc[~(df == 0 | df.isnan()).all(axis=1))]

但是得到了ValueError: The truth value of a Series is ambiguous.

这里是一个示例数据框:

df = pd.DataFrame({'x': {'Total': -3.637978807091713e-09}, 'y': {'Total': -3.637978807091713e-09}, 'z': {'Total': -3.637978807091713e-09}, 'a': {'Total': 0.0}, 'b': {'Total': 1387241.5974624965}, 'c': {'Total': 1387241.5974624965}})
python pandas na
2个回答
4
投票

IIUC,您需要将倒数包装在括号中:

df[(~(df == 0 | df.isna())).all(axis=1)]

示例:

print(df)

   P   kt    b   tt  mky  depth
0  1  0.0  0.0  0.0  0.0    0.0
1  2  0.0  0.0  0.0  0.0    0.0
2  3  0.0  0.0  0.0  0.0    0.0
3  4  0.0  NaN  0.0  0.0    0.0
4  5  1.1  NaN  4.5  2.3    9.0

print(df[(~(df == 0 | df.isna())).all(axis=1)])


   P   kt   b   tt  mky  depth
4  5  1.1 NaN  4.5  2.3    9.0

2
投票

我们可以使用摩根定律的逆逻辑摆脱运算符~。有时最好使用.mul而不是&,以避免使用括号。

df[df.notna().mul(df.ne(0)).all(axis = 1)]
#df[(df.notna() & df.ne(0)).all(axis = 1)]
© www.soinside.com 2019 - 2024. All rights reserved.