如何将Dask.DataFrame转换为pd.DataFrame?

61

我已完成 dask.DataFrame 的数据处理,现在想将其转换为 pandas.DataFrame,以便运用 sklearn 对结果进行聚合分析,应该如何操作?

3个回答

100
您可以调用.compute()方法将dask.dataframe转换为pandas dataframe:
df = df.compute()

9
可以将它重命名为更加直观的名称,比如to_pandas()吗? - Alexey Grigorev
2
可能不会。.compute()在所有dask集合中都非常标准。 - MRocklin
1
.to_compute() 对于任何使用 dask 的人来说都非常直观。 - NirIzr
@MRocklin,我正在从一个文件夹中读取所有的CSV文件,无法明确地提及每个列名以及它们的数据类型,并将所有的df合并到一个共同的列上,在进行df.compute时,出现了ValueError: The columns in the computed data do not match the columns in the provided metadata错误,请问如何解决。 - Pyd
1
@pyd,请检查read_csv中的meta,它可以由普通的pandas.read_csv()提供;但是您需要确保这样的meta信息在您读取的所有文件中保持一致。 - sunt05

5

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亿行的数据集筛选到只剩下1万行,那么您可能只需要切换到Pandas API。


-3
pd_df = pd.DataFrame(dsk_df)

这里是结果。它比 dsk_df.compute() 更快。


3
根据我的经验,这只会返回一个数据框,其中仅将列名转置为单行。 - closedloop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接