簡體   English   中英

Pandas - 如果dataFrame的所有值都是NaN

[英]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.isnannumpy.all ,但首先將所有值numpy arrayvalues

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM