Я хочу проверить, содержит ли столбец в Dataframe другое значение, отличное от 0 или NaN. Поэтому я попробовал np.any(), но он также возвращает true, если в столбце находятся только NaN и 0.
np.any([0 , np.NaN, 0])
True
Каков наилучший способ получить такой вывод: (тип столбца - float64)
df = [0 , np.NaN, 18, 0]
True
df = [0, np.NaN, 0]
False
Спасибо, R
Замените отсутствующие значения 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
инвертирует тогда сумму
(~df['column name'].isin([0, np.nan])).sum() > 0
или же
any(~df['column name'].isin([0, np.nan]))
~numpy.isnan()
я бы использовалnumpy.isfinite
с пониманием того, что можно также отбрасывать бесконечные значения.