当涉及到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
答案 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)