2017-08-21 483 views
2

我要檢查一個數據幀是否爲空:如何檢查DataFrame是否爲空?

BTC_ewma_24 ETH_ewma_24 DASH_ewma_24 
24 4011.235578 334.597119  281.15 
25 4011.285662 334.591056  281.15 
26 4011.373673 334.603479  281.15 
27 4011.453068 334.614686  281.15 
28 4011.526571 334.624813  281.15 
29 4011.591356 334.633980  281.15 
30 4011.650075 334.642288  281.15 
31 4011.703366 334.649828  281.15 

我試圖if(self.mean_exp.bool() == False): 但它回答我:

ValueError: The truth value of a DataFrame is ambiguous. 
Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

彷彿壓根沒注意到,我用.bool()

然後我用a.empty它回答我:

AttributeError: 'list' object has no attribute 'empty' 
+0

的可能的複製[Pandaic的方法來檢查一個數據幀是否有任何行(https://stackoverflow.com/questions/45780130/pandaic-way-to-check-是否一個數據幀有任何行) –

+0

@cᴏʟᴅsᴘᴇᴇᴅ感謝您指出它,但馬克西姆答案更清晰。 –

回答

4

IIUC:有.empty屬性:

數據框:

In [86]: pd.DataFrame().empty 
Out[86]: True 

In [87]: pd.DataFrame([1,2,3]).empty 
Out[87]: False 

系列:

In [88]: pd.Series().empty 
Out[88]: True 

In [89]: pd.Series([1,2,3]).empty 
Out[89]: False 

注意:檢查DF的長度(​​)可能會節省你相比幾毫秒到df.empty方法;-)

In [142]: df = pd.DataFrame() 

In [143]: %timeit df.empty 
8.25 µs ± 22.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 

In [144]: %timeit len(df) 
2.35 µs ± 7.56 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 

In [145]: df = pd.DataFrame(np.random.randn(10*5, 3), columns=['a', 'b', 'c']) 

In [146]: %timeit df.empty 
15.3 µs ± 269 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 

In [147]: %timeit len(df) 
3.58 µs ± 12.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) 
1

,也可以使用.shape

pd.DataFrame().shape 
Out[1666]: (0, 0) 
pd.DataFrame([1,2,3]).shape 
Out[1667]: (3, 1) 
+1

我覺得'.size'會更容易/更好... ;-) – MaxU

+0

@MaxU你是對的〜:-) – Wen