[英]Pandas - If all values of dataFrame are NaN
如何創建執行以下操作的if語句:
if all values in dataframe are nan:
do something
else:
do something else
根據這篇文章 ,可以檢查DataFrame的所有值是否都是NaN。 我知道一個人做不到:
if df.isnull().all():
do something
它返回以下錯誤:
ValueError:Series的真值是不明確的。 使用a.empty,a.bool(),a.item(),a.any()或a.all()。
需要另外all
,因為首先all
回歸Series
,另一個scalar
:
if df.isnull().all().all():
do something
樣品:
df = pd.DataFrame(index=range(5), columns=list('abcde'))
print (df)
a b c d e
0 NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN NaN
print (df.isnull())
a b c d e
0 True True True True True
1 True True True True True
2 True True True True True
3 True True True True True
4 True True True True True
print (df.isnull().all())
a True
b True
c True
d True
e True
dtype: bool
print (df.isnull().all().all())
True
if df.isnull().all().all():
print ('do something')
如果需要更快的解決方案- numpy.isnan
與numpy.all
,但首先將所有值numpy array
由values
:
print (np.isnan(df.values).all())
True
時間 :
df = pd.DataFrame(np.full((1000,1000), np.nan))
print (df)
In [232]: %timeit (np.isnan(df.values).all())
1000 loops, best of 3: 1.23 ms per loop
In [233]: %timeit (df.isnull().all().all())
100 loops, best of 3: 10 ms per loop
In [234]: %timeit (df.isnull().values.all())
1000 loops, best of 3: 1.46 ms per loop
對jezrael的快速改進將是df.isnull().values.all()
In [156]: df.isnull().values.all()
Out[156]: True
基准
小
In [149]: df.shape
Out[149]: (5, 5)
In [150]: %timeit df.isnull().values.all()
10000 loops, best of 3: 112 µs per loop
In [151]: %timeit df.isnull().all().all()
1000 loops, best of 3: 271 µs per loop
大
In [153]: df.shape
Out[153]: (1000, 1000)
In [154]: %timeit df.isnull().values.all()
10 loops, best of 3: 26.6 ms per loop
In [155]: %timeit df.isnull().all().all()
10 loops, best of 3: 40.8 ms per loop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.