首页 > 解决方案 > 如果懒惰地评估,如何检查 dask 数据框是否为空?

问题描述

我知道这个问题。但请检查下面的代码(最小工作示例):

import dask.dataframe as dd
import pandas as pd

# intialise data of lists.
data = {'Name': ['Tom', 'nick', 'krish', 'jack'], 'Age': [20, 21, 19, 18]}

# Create DataFrame
df = pd.DataFrame(data)
dask_df = dd.from_pandas(df, npartitions=1)

categoric_df = dask_df.select_dtypes(include="category")

当我尝试打印时,categoric_df出现以下错误:

ValueError: No objects to concatenate

当我categoric_df从 PyCharm 调试器中检查时:

Unable to get repr for <class 'dask.dataframe.core.DataFrame'>

有了这些错误,我可以构建一个 try/except 块来检查数据框是否为空。但我不想使用这种方法,因为它不能保证一直工作并且 try/except 会减慢代码的速度。当我尝试打印计算categoric_df时,它看起来像这样:

>>>print(categoric_df.compute())
Empty DataFrame
Columns: []
Index: [0, 1, 2, 3]

总结:在这里,如果我选择不存在的 dypes 并从中创建一个 dask.DataFrame ,如果我使用函数,我会得到一个dask.DataFrame乍一看并不为空的。len()

>>>print(len(categoric_df))
4
>>>print(len(categoric_df.compute())
4
>>>print(categoric_df.compute().empty)
True

有没有办法在categoric_df不计算的情况下检查它是否为空?(我希望它保持惰性评估。)

更新print(len(categoric_df.columns))正在返回0。这可用于确定数据框是否为空。但这可行吗?我不确定。

标签: python-3.xdaskdask-distributed

解决方案


看起来您遇到了数据框无法正确打印的错误。如果您想在https://github.com/dask/dask/issues/new上提出错误报告,那将是报告此问题的正确位置。

这不应该影响您想要进行的检查。查看.columns是否有任何列似乎是合理的。数据框仍然有行的事实只是意味着仍然有一个索引。


推荐阅读