【问题标题】:How to transform Dask.DataFrame to pd.DataFrame?如何将 Dask.DataFrame 转换为 pd.DataFrame?
【发布时间】:2016-12-24 19:20:02
【问题描述】:

如何将生成的 dask.DataFrame 转换为 pandas.DataFrame(假设我完成了繁重的工作,只想将 sklearn 应用于我的汇总结果)?

【问题讨论】:

    标签: python pandas dask


    【解决方案1】:

    您可以调用 .compute() 方法将 dask.dataframe 转换为 pandas 数据帧:

    df = df.compute()
    

    【讨论】:

    • 是否可以将其重命名为更直观的名称,例如to_pandas()?
    • 可能不会,不。 .compute() 在所有 dask 集合中是相当标准的。
    • .to_compute() 实际上对于任何使用 dask 的人来说都非常直观。
    • @MRocklin,我正在从一个文件夹中读取所有 csv,我无法明确提及每个列名及其 dtypes。并将所有 df 合并到一个公共列上的单个 df。当我在做 df.compute 时,我得到ValueError: The columns in the computed data do not match the columns in the provided metadata,如何处理这个
    • @pyd,查看read_csv中的meta,可以通过普通的pandas.read_csv()提供;但您需要确保此类meta 信息在您正在阅读的所有文件中保持一致。
    【解决方案2】:

    MRocklin 的回答是正确的,这个回答提供了更多详细信息,说明何时适合从 Dask DataFrame 转换为 Pandas DataFrame(以及如何预测何时会导致问题)。

    Dask DataFrame 中的每个分区都是 Pandas DataFrame。运行 df.compute() 会将 Dask DataFrame 中的所有底层分区合并为一个 Pandas DataFrame。如果 Pandas DataFrame 的大小大于您机器上的 RAM,则会导致问题。

    如果df 有 30 GB 的数据,而您的计算机有 16 GB 的 RAM,那么 df.compute() 将因内存错误而崩溃。如果df 只有 1 GB 的数据,那你就没事了。

    您可以运行 df.memory_usage(deep=True).sum() 来计算您的 DataFrame 正在使用的内存量。这会让你知道你的 DataFrame 是否足够小,可以合并成一个 Pandas DataFrame。

    重新分区会更改 Dask DataFrame 中底层分区的数量。 df.repartition(1).partitions[0] 在概念上类似于 df.compute()

    在执行大过滤操作后,转换为 Pandas DataFrame 尤其可能。如果您将 1000 亿行数据集过滤到 10000 行,那么您可能只需切换到 Pandas API。

    【讨论】:

      【解决方案3】:
      pd_df = pd.DataFrame(dsk_df)
      

      给你。它比dsk_df.compute() 更快。

      【讨论】:

      • 根据我的经验,这只是返回一个数据框,其中只有列名转置在一行中。
      猜你喜欢
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 2020-09-15
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多