如何检查DataFrame是否为空?

7

我想要检查一个DataFrame是否为空:

    BTC_ewma_24  ETH_ewma_24  DASH_ewma_24
24  4011.235578   334.597119        281.15
25  4011.285662   334.591056        281.15
26  4011.373673   334.603479        281.15
27  4011.453068   334.614686        281.15
28  4011.526571   334.624813        281.15
29  4011.591356   334.633980        281.15
30  4011.650075   334.642288        281.15
31  4011.703366   334.649828        281.15

我尝试了 if(self.mean_exp.bool() == False):,但它返回了以下结果:
ValueError: The truth value of a DataFrame is ambiguous.
Use a.empty, a.bool(), a.item(), a.any() or a.all().

好像它甚至没有注意到我使用了.bool()

然后我使用了a.empty,它回答我:

AttributeError: 'list' object has no attribute 'empty'

可能是[Pandaic方式检查数据框是否有任何行]的重复问题(https://stackoverflow.com/questions/45780130/pandaic-way-to-check-whether-a-dataframe-has-any-rows)。 - cs95
@cᴏʟᴅsᴘᴇᴇᴅ 谢谢你指出这个问题,但MaxU的回答更清晰。 - Antoine Coppin
2个回答

10

如果我理解正确,这里有一个.empty属性:

DataFrame:

In [86]: pd.DataFrame().empty
Out[86]: True

In [87]: pd.DataFrame([1,2,3]).empty
Out[87]: False

系列:

In [88]: pd.Series().empty
Out[88]: True

In [89]: pd.Series([1,2,3]).empty
Out[89]: False

注意:与df.empty方法相比,检查DF的长度(len(df))可能会节省您几毫秒的时间;-)

In [142]: df = pd.DataFrame()

In [143]: %timeit df.empty
8.25 µs ± 22.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [144]: %timeit len(df)
2.35 µs ± 7.56 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [145]: df = pd.DataFrame(np.random.randn(10*5, 3), columns=['a', 'b', 'c'])

In [146]: %timeit df.empty
15.3 µs ± 269 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [147]: %timeit len(df)
3.58 µs ± 12.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

1
或者你可以使用.shape
pd.DataFrame().shape
Out[1666]: (0, 0)
pd.DataFrame([1,2,3]).shape
Out[1667]: (3, 1)

1
我认为.size会更容易/更好...;-) - MaxU - stand with Ukraine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接