Python 如何检查数据帧是否为空?

Python 如何检查数据帧是否为空?,python,pandas,dataframe,Python,Pandas,Dataframe,如何检查数据帧是否为空?在我的例子中,如果DataFrame为空,我想在终端中打印一些消息 您可以使用属性df.empty检查它是否为空: if df.empty: print('DataFrame is empty!') 来源:我使用len功能。它比空的要快得多len(df.index)甚至更快 import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(10000, 4), columns=li

如何检查数据帧是否为空?在我的例子中,如果
DataFrame
为空,我想在终端中打印一些消息

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

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

来源:

我使用
len
功能。它比空的要快得多
len(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
'''

我更喜欢走长途。以下是我为避免使用try-except条款而遵循的检查:

  • 检查变量是否不是None
  • 然后检查它是否是数据帧,然后
  • 确保它不是空的
  • 此处,
    DATA
    是可疑变量-

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

    为了查看数据帧是否为空,我认为应该测试数据帧的列索引的长度:

    如果len(df.columns)==0:1
    
    原因: 根据《公约》,有以下区别:

    • 包含0行和0列的空数据帧
    • 一个空数据帧,其中的行包含
      NaN
      ,因此至少有一列
    可以说,它们并不相同。其他答案是不精确的,因为
    df.empty
    len(df)
    ,或
    len(df.index)
    没有区别,并且返回索引在这两种情况下都是0empty

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

    [1]中的
    :将熊猫作为pd导入
    df1=pd.DataFrame()
    df1
    Out[1]:空数据帧
    列:[]
    索引:[]
    在[2]中:len(df1.index)#或len(df1)
    Out[2]:0
    在[3]中:df1.empty
    Out[3]:正确
    
    示例2:数据帧被清空为0行,但仍保留
    n

    [4]中的
    df2=pd.DataFrame({'AA':[1,2,3],'BB':[11,22,33]})
    df2
    Out[4]:AA-BB
    0   1  11
    1   2  22
    2   3  33
    [5]中:df2=df2[df2['AA']==5]
    df2
    Out[5]:空数据帧
    栏目:[AA、BB]
    索引:[]
    在[6]中:len(df2.index)#或len(df2)
    Out[6]:0
    In[7]:df2.empty
    Out[7]:对
    
    现在,以前面的示例为基础,其中索引为0,空为True。当读取第一个加载的数据帧df1的列索引的长度时,它返回0列以证明它确实为空

    [8]中的
    :len(df1.列)
    Out[8]:0
    In[9]:len(df2.列)
    Out[9]:2
    
    关键的,虽然第二个数据帧df2不包含任何数据,但它不是完全空的
    ,因为它返回保留的空列数量

    为什么重要 让我们向这些数据帧添加一个新列以了解其含义:

    #如预期,空列显示1个系列
    在[10]中:df1['CC']=[111222333]
    df1
    Out[10]:CC
    0 111
    1 222
    2 333
    In[11]:len(df1.列)
    Out[11]:1
    #请注意,在df2中具有包含'NaN'值的行的持久化序列
    在[12]中:df2['CC']=[111222333]
    df2
    Out[12]:AA BB CC
    0楠楠111
    1楠楠222
    2楠楠333
    In[13]:len(df2.列)
    Out[13]:3
    
    很明显,df2中的原始柱已重新浮出水面。因此,明智的做法是使用
    len(pandas.core.frame.DataFrame.columns)
    读取列索引的长度

    实际解决方案
    #新数据帧df
    [1]中的df=pd.DataFrame({'AA':[1,2,3],'BB':[11,22,33]})
    df
    Out[1]:AA-BB
    0   1  11
    1   2  22
    2   3  33
    #这种数据操作方法会导致df为空
    #因为一部分值不可用(`NaN`)
    在[2]中:df=df[df['AA']==5]
    df
    Out[2]:空数据帧
    栏目:[AA、BB]
    索引:[]
    #注意:df是空的,但列是持久的
    In[3]:len(测向列)
    Out[3]:2
    #因此,本页上的其他答案
    在[4]中:len(df.index)#或len(df)
    Out[4]:0
    In[5]:df.empty
    Out[5]:对
    
    #解决方案:有条件地检查空列
    在[6]中:如果len(df.columns)!=0:  # 
    以及功能:

    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')
    

    len()不起作用?对于空的数据帧,它应该返回0。这似乎是一个遗憾,因为您需要知道df是一个pd.dataframe。我想知道不在pd.DataFrame上实现bool()的动机。@Quant-文档中讨论了bool在此处为DataFrame引发错误的原因:。引用:“因为不是零长度,所以它应该是真的吗?因为有假值,所以它应该是假的吗?这是不清楚的,所以熊猫引发了一个ValueError”更快的方法是
    df.shape[0]==0
    来检查数据帧是否为空。您可以对其进行测试。此方法不会在所有情况下都起作用,因为在某些情况下,空数据帧可能是非类型的。由于len(df.index)==0或len(df.columns)==0,数据帧可以为空。如果预期变量将是数据帧(这是OP所暗示的),则此方法是多余的,而且是错误的做法要么为空,要么有行。如果它不是DF(或者如果它没有),则应该抛出异常,因为某个地方出了问题。在Python中,
    try/except
    是便宜的,
    If
    是昂贵的。Python既不是Java也不是C;虽然这段代码可能会解决这个问题,但它如何以及为什么解决这个问题会真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。
    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')