IIUC 我认为你需要这样的东西
data = pd.DataFrame({'col_A' : [1,2,3,4],
'col_B' : [1,2,np.NaN,4]})
#finding null values in columns and if atleat one null value is present printing it.
print(data.columns.values[data.isnull().any()])
['col_B']
试试这个
print(data.isnull().sum()[data.isnull().any()])
col_B 1
dtype: int64
对于 OP
if data.apply(num_missing, axis=0)>0:
print('Yay')
因为data.apply(num_missing, axis=0)>0 行产生了一个系列而不是一个布尔值。如果你对 series bool 列使用 if 语句,它会将回溯抛出为:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-282-12bc35218d0e> in <module>()
----> 1 if data.apply(num_missing, axis=0)>0:
2 print('Yay')
~\AppData\Local\conda\conda\envs\py3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
1119 raise ValueError("The truth value of a {0} is ambiguous. "
1120 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
-> 1121 .format(self.__class__.__name__))
1122
1123 __bool__ = __nonzero__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
上述 if 语句应与 a.empty, a.bool(), a.item(), a.any() or a.all() 中的任何一个一起使用。所以,最后你会得到一个具有列数长度的布尔系列。这是多余的。所以最好使用上面提到的方法,而不是坚持 if 语句。
如果您仍想在 if 语句中执行。试试这个:
if (data.apply(num_missing, axis=0)>0).any():
print(data.apply(num_missing, axis=0)[data.apply(num_missing, axis=0)>0])
如果任何列中都没有 NaN 值,那么它会很有帮助,否则 if 语句将是多余的。谢谢。