我使用len函数。它比empty()快得多。 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
'''
series
。答案则是关于dataframe
的;一个更好的检查dataframe是否为空的方法是 if len(df.columns) == 0
。https://dev59.com/mWIj5IYBdhLWcg3w2odr#54009974 - Sven Haile我使用此方法来检查DataFrame中特定列是否没有值或为空:
len(df.col_name.value_counts()) > 0
empty
而不是isempty
。不确定为什么他一开始没有读到这个... - acushnerseries
。答案则是关于dataframe
的;一个更好的检查dataframe是否为空的方法是 if len(df.columns) == 0
。https://dev59.com/mWIj5IYBdhLWcg3w2odr#54009974 - Sven Haile>>> df_empty = pd.DataFrame({'A' : []})
>>> df_empty
Empty DataFrame
Columns: [A]
Index: []
>>> df_empty.empty
True
如果我们的DataFrame中只有NaN值,它不被认为是空的!我们需要删除NaN值来使DataFrame为空:
>>> df = pd.DataFrame({'A' : [np.nan]})
>>> df
A
0 NaN
>>> df.empty
False
>>> df.dropna().empty
True
根据您对空的定义,答案可能会有很大的不同,正如其他答案所示。我尝试进行总结,但首先需要一些测试数据框:
no_rows = pd.DataFrame([], columns=list('ABCD'))
no_cols = pd.DataFrame([], index=range(3))
only_na = pd.DataFrame(float('nan'), index=range(3), columns=list('ABCD'))
目前最流行的答案是:一个没有任何行的DataFrame是空的:
def empty_no_rows(df):
return len(df.index) == 0
还没有提到,但同样有效的是转置定义:
def empty_no_cols(df):
return len(df.columns) == 0
实际上,你关心的是数值!如果你更喜欢一个能够处理空的 index
或者 columns
的定义,下面的定义可以起作用:
def empty_no_vals(df):
return df.values.size == 0
为什么不使用Pandas对于空值的定义呢?对于这些测试用例,它可以得到与无值定义相同的结果:
def empty_native(df):
return df.empty
Pandas自己的实现基本上只检查len(df.columns) == 0 or len(df.index) == 0
,并且从不直接查看values
。
最后,您可能希望在考虑中忽略NaN
:
def empty_nans(df):
return df.dropna(how='all').empty
但实际上,这引出了下一个棘手的问题,你现在必须决定如何以及沿着哪个轴丢弃值?在这里,我坚持更加保守的all。一旦这些值被丢弃,你就可以将所有以上定义应用于其结果。
DataFrame | 无行 | 无列 | 无值 | 空白本地 | 空白NaNs |
---|---|---|---|---|---|
no_rows |
✅ 真 | ❌ 假 | ✅ 真 | ✅ 真 | ✅ 真 |
no_cols |
❌ 假 | ✅ 真 | ✅ 真 | ✅ 真 | ✅ 真 |
only_na |
❌ 假 | ❌ 假 | ❌ 假 | ❌ 假 | ✅ 真 |
编辑备注:我会将所有这些函数称为is_empty_...
,但这会导致比较表过于宽广。
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(10, 2), columns=list("AB"))
df["empty_series"] = np.nan
# this would lead to a non empty series
# df["empty_series"].iloc[0] = "foo"
# returns True of all values of series are NaN
print(df["empty_series"].isna().all())
matched_this = pd.Series(matched_groups)
有时候匹配结果是[]. 但match_this.empty却为False。 为了解决这个问题,我使用了以下方法:
if match_this[0]:
# do ...
想要检查一个序列是否为空,我会执行以下操作:
df['your data'].notna().sum() == 0
id
,你可以尝试df[df["id"].isna()].shape[0] == 0
。这里的许多答案都是处理测量空的pandas dataframe。 pandas dataframe与pandas Series不同。单个pandas Series在数据操作过程中可能会改变其长度。直接验证Series的长度可能很有用,可以使用以下方法:
Series.empty
len()
len(Series.array)
让我们创建3个数据框来比较测量系列长度时的输出
>>> df0 = pd.DataFrame({'X' : []})
>>> df0
Empty DataFrame
Columns: [X]
Index: []
>>> df1 = pd.DataFrame({'A' : ['np.Nan']})
>>> df1
A
0 np.NaN
>>> df2 = pd.DataFrame({'B' : ['b']})
>>> df2
B
0 b
pandas系列df0.X
为空。因此,
1. >>> df0.X.empty
True
2. >>> len(df0.X)
0
3. >>> len(df0.x.array)
0
pf1.A
和df2.B
都包含1个值。因此,df1.A | df2.B
----------------------------|----------------------------
1. >>> df1.A.empty | 1. >>> df2.B.empty
False | False
2. >>> len(df1.A) | 2. >>> len(df2.B)
1 | 1
3. >>> len(df1.A.array) | 3. >>> len(df2.B.array)
1 | 1
df['A']
,可以使用以下方法。if df.A.empty == True:
if len(df.A) == 0:
if len(df.A.array) == 0:
len(ts) == 0
怎么样?编辑:ts.empty
应该可行。 - behzad.nourilen(ts)
对我有用,但ts.empty
不行。 - BP_