空DataFrame不承认其为空

时间:2017-11-16 16:16:04

标签: python pandas dataframe is-empty

当涉及到pandas DataFrames时,我不能理解空虚。我有一个空行的DF但当我隔离其中一行时它不是空的。

我在这里制作了一个数据帧:

>>> df = pandas.DataFrame(columns=[1,2,3], data=[[1,2,3],[1,None,3],[None, None, None],[3,2,1],[4,5,6],[None,None,None],[None,None,None]])
>>> df
     1    2    3
0  1.0  2.0  3.0
1  1.0  NaN  3.0
2  NaN  NaN  NaN
3  3.0  2.0  1.0
4  4.0  5.0  6.0
5  NaN  NaN  NaN
6  NaN  NaN  NaN

然后我知道第2行没有任何东西,所以我检查了......

>>> df[2:3].empty
    False

奇。所以我把它分成了自己的数据框:

>>> df1 = df[2:3]
>>> df1
    1   2   3
2 NaN NaN NaN

>>> df1.empty
False

如何检查空虚(连续的所有元素都是无或NaN?)

http://pandas.pydata.org/pandas-docs/version/0.18/generated/pandas.DataFrame.empty.html

6 个答案:

答案 0 :(得分:2)

我猜你正在寻找这样的东西:

In [296]: df[5:]
Out[296]:
    1   2   3
5 NaN NaN NaN
6 NaN NaN NaN

In [297]: df[5:].isnull().all(1).all()
Out[297]: True

甚至更好(如proposed by @IanS):

In [300]: df[5:].isnull().all().all()
Out[300]: True

答案 1 :(得分:2)

您误解了empty的用途。它的意思是检查一个系列/数据帧的大小是否大于0,这意味着有行。例如,

df.iloc[1:0]

Empty DataFrame
Columns: [1, 2, 3]
Index: []

df.iloc[1:0].empty
True

如果您想检查某行所有NaNs ,请使用isnull + all

df.isnull().all(1)

0    False
1    False
2     True
3    False
4    False
5     True
6     True
dtype: bool

对于您的示例,这应该:

df[2:3].isnull().all(1).item()
True

请注意,如果您的切片大小超过一行,则无法使用item

答案 2 :(得分:2)

您可以从选择中删除所有空值,并检查结果是否为空:

>>> df[5:].dropna(how='all').empty
True

答案 3 :(得分:1)

我猜你有使用isnull()而不是empy()。

import pandas 
df = pandas.DataFrame(columns=[1,2,3], data=[[1,2,3],[1,None,3],[None, None, None],[3,2,1],[4,5,6],[None,None,None],[None,None,None]])
df[2:3].isnull()
1   2   3
True    True    True

答案 4 :(得分:1)

如果您不想将NaN值计为实数,则等于

df.dropna().iloc[5:]

您选择数据框中不存在的行

df.dropna().iloc[5:].empty
Out[921]: True

答案 5 :(得分:1)

如果您有数据框并想要删除每个列中包含NaN的所有行,则可以执行此操作

df.dropna(how='all')

在某些情况下,请注意您的数据框在一列中也有NaN。如果您需要在这种情况下删除整行:

df.dropna(how='any')

执行此操作(这是您的偏好)之后,您可以使用以下方法检查数据帧的长度(它包含的行数):

len(df)