【发布时间】:2016-12-24 19:20:02
【问题描述】:
如何将生成的 dask.DataFrame 转换为 pandas.DataFrame(假设我完成了繁重的工作,只想将 sklearn 应用于我的汇总结果)?
【问题讨论】:
如何将生成的 dask.DataFrame 转换为 pandas.DataFrame(假设我完成了繁重的工作,只想将 sklearn 应用于我的汇总结果)?
【问题讨论】:
您可以调用 .compute() 方法将 dask.dataframe 转换为 pandas 数据帧:
df = df.compute()
【讨论】:
to_pandas()?
.compute() 在所有 dask 集合中是相当标准的。
.to_compute() 实际上对于任何使用 dask 的人来说都非常直观。
ValueError: The columns in the computed data do not match the columns in the provided metadata,如何处理这个
read_csv中的meta,可以通过普通的pandas.read_csv()提供;但您需要确保此类meta 信息在您正在阅读的所有文件中保持一致。
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。
【讨论】:
pd_df = pd.DataFrame(dsk_df)
给你。它比dsk_df.compute() 更快。
【讨论】: