【问题标题】:How to check if dask dataframe is empty if lazily evaluated?如果懒惰地评估,如何检查 dask 数据框是否为空?
【发布时间】:2019-12-28 13:16:03
【问题描述】:

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

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 会减慢代码的速度。 当我尝试打印计算出的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。这可用于确定数据框是否为空。但是 这可行吗?我不确定。

【问题讨论】:

  • 我刚刚发现如果数据框为空,我可以使用print(len(categoric_df.columns)) 打印出0。但这可行吗?我不确定。

标签: python-3.x dask dask-distributed


【解决方案1】:

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

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

【讨论】:

  • 我刚刚按照您的建议打开了一个问题。我正在等待回复...
  • @MehmedB 如果 dask_df 包含标题但没有行,则 len(dask_df.columns) 不会返回 0 并且无法检查为空。
  • @MehmedB 您能否提供一个指向该问题的链接以供参考?
猜你喜欢
  • 2017-01-13
  • 2016-05-12
  • 1970-01-01
  • 2021-08-12
  • 2022-11-13
  • 2017-04-30
  • 1970-01-01
  • 2021-07-10
  • 2014-10-10
相关资源
最近更新 更多