如果延迟评估,如何检查 dask 数据框是否为空?

How to check if dask dataframe is empty if lazily evaluated?

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

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

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

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

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

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

总而言之:如果我 select 不存在的类型并从中创建一个 dask.DataFrame,我会得到一个 dask.DataFrame,如果我使用 len() 函数。

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

有没有办法不用计算就可以判断categoric_df是否为空? (我希望它保持惰性评估。)

UPDATE: print(len(categoric_df.columns)) is returning 0. This can be used for figuring out if the dataframe is empty or not. But is this viable? I am not sure.

您似乎 运行 遇到了数据框无法正确打印的错误。如果您想在 https://github.com/dask/dask/issues/new 提出错误报告,那将是报告此问题的正确地点。

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