展开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}})
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
我们可以使用摩根定律的逆逻辑摆脱运算符~
。有时最好使用.mul
而不是&
,以避免使用括号。
df[df.notna().mul(df.ne(0)).all(axis = 1)]
#df[(df.notna() & df.ne(0)).all(axis = 1)]