如何检查pandas DataFrame是否为空?


Answers:


461

您可以使用该属性df.empty检查其是否为空:

if df.empty:
    print('DataFrame is empty!')

资料来源:熊猫文件


3
这似乎很可耻,因为您需要知道df是pd.DataFrame。我想知道没有在pd.DataFrame上实现bool()的动机。
2014年

17
@Quant-文档讨论了bool为什么在此处引发数据框错误:link。Quote:“应该是True,因为它不是零长度的?是False是因为有False值?目前还不清楚,所以,熊猫会引发ValueError”
Bij 2014年

56

我使用的len功能。它比快得多emptylen(df.index)甚至更快。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10000, 4), columns=list('ABCD'))

def empty(df):
    return df.empty

def lenz(df):
    return len(df) == 0

def lenzi(df):
    return len(df.index) == 0

'''
%timeit empty(df)
%timeit lenz(df)
%timeit lenzi(df)

10000 loops, best of 3: 13.9 µs per loop
100000 loops, best of 3: 2.34 µs per loop
1000000 loops, best of 3: 695 ns per loop

len on index seems to be faster
'''

7
由于len(df.index)== 0或len(df.columns)== 0,因此DataFrame也可以为空。
Mark Horvath

9

我更喜欢长途旅行。这些是我为避免使用try-except子句而进行的检查-

  1. 检查变量是否不为None
  2. 然后检查其是否为数据框和
  3. 确保它不为空

DATA是可疑变量-

DATA is not None and isinstance(DATA, pd.DataFrame) and not DATA.empty

2
如果期望变量是空的或具有行的DataFrame(这就是OP的含义),那么这是多余的,也是一种不好的做法。如果不是DF(或者不是DF),则应抛出异常,因为某个地方出了问题。
fgblomqvist

在Python中,try/except既便宜又if昂贵。Python既不是Java也不是C。在这里,宽恕比许可更容易
Nick Marinakis

4

似乎在该线程中接受的空定义是仅具有零行的数据帧。但是在零行零列空数据框和零行零列至少一列空数据框之间有区别。在每种情况下,索引的长度都是0,并且empty = True,如下所示:

示例1:具有0行和0列的空数据框

In [1]: import pandas as pd
        df1 = pd.DataFrame()
        df1
Out[1]: Empty DataFrame
        Columns: []
        Index: []

In [2]: len(df1.index)
Out[2]: 0

In [3]: df1.empty
Out[3]: True

示例2:具有0行和至少1列的空数据框

In [4]: df2 = pd.DataFrame({'AA' : [], 'BB' : []})
        df2
Out[4]: Empty DataFrame
        Columns: [AA, BB]
        Index: []

In [5]: len(df2.index)
Out[5]: 0

In [6]: df2.empty
Out[6]: True

区分没有标题和数据数据帧或只是没有数据数据帧的一种方法是测试列索引的长度。第一个加载的数据帧返回零列,第二个数据帧返回空列数。

In [7]: len(df1.columns)
Out[7]: 0

In [8]: len(df2.columns)
Out[8]: 2

-1
1)如果一个DataFrame具有Nan和Non Null值,并且您想查找该DataFrame是否
是否为空,然后尝试此代码。
2)什么时候会发生这种情况? 
使用单个函数绘制多个DataFrame时会发生这种情况 
作为参数传递的参数。在这种情况下,该函数甚至尝试绘制数据 
当DataFrame为空并因此绘制一个空图时!
如果仅显示“ DataFrame has no data”消息,将很有意义。
3)为什么? 
如果DataFrame为空(即完全不包含任何数据。请使用Nan值来提醒您DataFrame) 
被认为是非空的),那么最好不要绘制而是显示一条消息:
假设我们有两个DataFrames df1和df2。
函数myfunc接受任何DataFrame(在这种情况下为df1和df2)并打印一条消息 
如果DataFrame为空(而不是绘制):
df1                     df2
col1 col2           col1 col2 
Nan   2              Nan  Nan 
2     Nan            Nan  Nan  

和功能:

def myfunc(df):
  if (df.count().sum())>0: ##count the total number of non Nan values.Equal to 0 if DataFrame is empty
     print('not empty')
     df.plot(kind='barh')
  else:
     display a message instead of plotting if it is empty
     print('empty')

尽管这段代码可以解决问题,但包括解释如何以及为什么解决该问题的说明,确实可以帮助提高您的帖子质量,并可能导致更多的投票。请记住,您将来会为读者回答问题,而不仅仅是现在问的人。请编辑您的答案以添加说明,并指出适用的限制和假设。来自评论
双响
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.