我想检查数据帧中的列是否包含不同于0或NaN的值。 因此,我尝试了np.any(),但是如果该列中只有NaN和0,它也会返回true。
np.any([0 , np.NaN, 0])
True
获得这样的输出的最佳方式是什么:(列的类型为float64)
df = [0 , np.NaN, 18, 0]
True
df = [0, np.NaN, 0]
False
谢谢你, R
答案 0 :(得分:3)
用fillna
替换缺失值并检查:
print (pd.Series([0 , np.NaN, 18, 0]).fillna(0).any())
True
print (pd.Series([0 , np.NaN, 0]).fillna(0).any())
False
或通过dropna
删除它们:
print (pd.Series([0 , np.NaN, 18, 0]).dropna().any())
True
print (pd.Series([0 , np.NaN, 0]).dropna().any())
False
numpy解决方案-通过使用numpy.isnan
进行索引并建立索引来删除缺失值:
def checkNaN_or_0(arr):
m = ~np.isnan(arr)
return np.any(np.array(arr)[m])
print (checkNaN_or_0([0, np.NaN, 18, 0]))
True
print (checkNaN_or_0([0, np.NaN, 0]))
False
感谢@AGN Gazer也可以使用np.inf
值进行替代工作:
def checkNaN_or_0(arr):
m = np.isfinite(arr)
return np.any(np.array(arr)[m])
print (checkNaN_or_0([0, np.NaN, 18, 0, np.inf]))
True
print (checkNaN_or_0([0, np.NaN, 0, np.inf]))
False
答案 1 :(得分:0)
先反转isin然后求和
(~df['column name'].isin([0, np.nan])).sum() > 0
或
any(~df['column name'].isin([0, np.nan]))