为了查看数据框是否为空,我认为应该测试数据框的列索引的长度:
if len(df.columns) == 0: 1
根据熊猫参考API,有以下区别:
NaN
,因此至少有一列按理说,它们并不相同。其他答案是不精确的,因为df.empty
,len(df)
,或len(df.index)
没有区别,在这两种情况下返回索引为0,空为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) # or len(df1)
Out[2]: 0
In [3]: df1.empty
Out[3]: True
示例2:清空为0行但仍保留n
列的数据帧
In [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
In [5]: df2 = df2[df2['AA'] == 5]
df2
Out[5]: Empty DataFrame
Columns: [AA, BB]
Index: []
In [6]: len(df2.index) # or len(df2)
Out[6]: 0
In [7]: df2.empty
Out[7]: True
现在,基于前面的示例,其中索引为0,空为True。当读取第一个加载的数据帧df1的列索引长度时,它返回0列来证明它确实是空的。
In [8]: len(df1.columns)
Out[8]: 0
In [9]: len(df2.columns)
Out[9]: 2
关键的是,虽然第二个数据帧df2不包含数据,但它不是完全空的,因为它返回保留的空列的数量。
让我们向这些数据帧添加一个新列以了解其含义:
# As expected, the empty column displays 1 series
In [10]: df1['CC'] = [111, 222, 333]
df1
Out[10]: CC
0 111
1 222
2 333
In [11]: len(df1.columns)
Out[11]: 1
# Note the persisting series with rows containing `NaN` values in df2
In [12]: df2['CC'] = [111, 222, 333]
df2
Out[12]: AA BB CC
0 NaN NaN 111
1 NaN NaN 222
2 NaN NaN 333
In [13]: len(df2.columns)
Out[13]: 3
很明显,df2中的原始柱已重新浮出水面。因此,明智的做法是使用len(pandas.core.frame.DataFrame.columns)
读取列索引的长度,以查看数据帧是否为空。
# New dataframe df
In [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
# This data manipulation approach results in an empty df
# because of a subset of values that are not available (`NaN`)
In [2]: df = df[df['AA'] == 5]
df
Out[2]: Empty DataFrame
Columns: [AA, BB]
Index: []
# NOTE: the df is empty, BUT the columns are persistent
In [3]: len(df.columns)
Out[3]: 2
# And accordingly, the other answers on this page
In [4]: len(df.index) # or len(df)
Out[4]: 0
In [5]: df.empty
Out[5]: True
# SOLUTION: conditionally check for empty columns
In [6]: if len(df.columns) != 0: # <--- here
# Do something, e.g.
# drop any columns containing rows with `NaN`
# to make the df really empty
df = df.dropna(how='all', axis=1)
df
Out[6]: Empty DataFrame
Columns: []
Index: []
# Testing shows it is indeed empty now
In [7]: len(df.columns)
Out[7]: 0
添加一个新的数据系列可以在不重新显示空列的情况下正常工作(事实上,没有任何包含仅包含NaN
行的系列):
In [8]: df['CC'] = [111, 222, 333]
df
Out[8]: CC
0 111
1 222
2 333
In [9]: len(df.columns)
Out[9]: 1
我使用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
'''
您可以使用属性df。empty
要检查它是否为空:
if df.empty:
print('DataFrame is empty!')
来源:熊猫文档
问题内容: 当我的函数f用一个变量调用时,我想检查var是否是一个熊猫数据框: 我想解决方案可能很简单,但即使 我无法使其按预期工作。 问题答案: 使用,没有别的: PEP8明确表示这是检查类型的首选方法 而且甚至不用考虑 处理继承(请参见type()和isinstance()之间的区别?)。例如,它会告诉你,如果一个变量是一个字符串(或),因为他们从派生) 专门针对 对象:
问题内容: 以下代码是我一直在使用的从sql数据库中检索用户信息的代码。 但是,当数据库中没有用户名等于LoginUser.Username的条目时,(dt!= null)不会返回false。有没有其他方法可以检查sqlcommand是否成功? 问题答案: 如果没有匹配的记录,您将得到一个空白,因此您可以检查返回的记录数: 并且,稍微偏离主题的地方,请阅读您的问题下方的注释,然后使用Google术
问题内容: 我有一个没有元素的数组,我正在尝试检查它是否为空。 例如,为什么下面代码中的if语句的条件永远不会为真? 问题答案: 数组和空数组之间有一个关键的区别。这是对的测试null。 “Empty”在这里没有官方含义。我选择将空定义为具有0个元素: 如果所有元素都是,则“空”的另一种定义是: 要么
问题内容: 如何检查numpy数组是否为空? 我使用了以下代码,但是如果数组包含零,则此操作将失败。 这是解决方案吗? 问题答案: 您可以随时查看属性。它定义为一个整数,并且在数组中没有元素时为零():
我有一个名为< code>Person的对象。 它有几个属性; 我设置了一个person对象,比如< code>Person p = new Person(1,“Joe”);。 1.) 我需要检查对象是否为空;以下表达式是否正确; 2.)我需要知道ID是否包含Int。 但是,java不允许这样做。我该怎么办?