我已完成 dask.DataFrame 的数据处理,现在想将其转换为 pandas.DataFrame,以便运用 sklearn 对结果进行聚合分析,应该如何操作?
df = df.compute()
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。
pd_df = pd.DataFrame(dsk_df)
这里是结果。它比 dsk_df.compute()
更快。
to_pandas()
吗? - Alexey Grigorev.compute()
在所有dask集合中都非常标准。 - MRocklin.to_compute()
对于任何使用 dask 的人来说都非常直观。 - NirIzrValueError: The columns in the computed data do not match the columns in the provided metadata
错误,请问如何解决。 - Pydread_csv
中的meta
,它可以由普通的pandas.read_csv()
提供;但是您需要确保这样的meta
信息在您读取的所有文件中保持一致。 - sunt05