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条款而遵循的检查:
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)
没有区别,并且返回索引在这两种情况下都是0,empty
例子
示例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')