将Dask包的Pandas DataFrame转换为单个Dask DataFrame

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Dask包的Pandas DataFrame转换为单个Dask DataFrame相关的知识,希望对你有一定的参考价值。

问题摘要

短版

我如何从Dask包的Pandas DataFrame转到单个Dask DataFrame?

Long Version

我有许多dask.dataframe的各种read函数(例如dd.read_csvdd.read_parquet)无法读取的文件。我确实有自己的函数,可以将它们读取为Pandas DataFrames(函数一次只能在一个文件上使用,类似于pd.read_csv)。我想将所有这些单个Pandas DataFrames放在一个大的Dask DataFrame中。

最小工作示例

[以下是一些示例CSV数据(我的数据实际上不是CSV格式,但是为了便于示例,在此使用它)。要创建一个最低限度的工作示例,可以将其另存为CSV并制作一些副本,然后使用下面的代码

"gender","race/ethnicity","parental level of education","lunch","test preparation course","math score","reading score","writing score"
"female","group B","bachelor's degree","standard","none","72","72","74"
"female","group C","some college","standard","completed","69","90","88"
"female","group B","master's degree","standard","none","90","95","93"
"male","group A","associate's degree","free/reduced","none","47","57","44"
"male","group C","some college","standard","none","76","78","75"
from glob import glob
import pandas as pd
import dask.bag as db

files = glob('/path/to/your/csvs/*.csv')
bag = db.from_sequence(files).map(pd.read_csv)

到目前为止我尝试过的事情

import pandas as pd
import dask.bag as db
import dask.dataframe as dd

# Create a Dask bag of pandas dataframes
bag = db.from_sequence(list_of_files).map(my_reader_function)

df = bag.map(lambda x: x.to_records()).to_dataframe() # this doesn't work
df = bag.map(lambda x: x.to_dict(orient = <any option>)).to_dataframe() # neither does this

# This gets me really close. It's a bag of Dask DataFrames. 
# But I can't figure out how to concatenate them together
df = bag.map(dd.from_pandas, npartitions = 1)

df = dd.from_delayed(bag) # returns an error
答案

我建议将dask.delayed与dask.dataframe一起使用。有一个很好的例子可以在这里完成您想做的事情:

https://docs.dask.org/en/latest/delayed-collections.html

以上是关于将Dask包的Pandas DataFrame转换为单个Dask DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

将 Pandas 数据帧转换为 Dask 数据帧

在 for 循环中将 Python Dask 系列转换为列表或 Dask DataFrame

懒惰地从 PostgreSQL / Cassandra 创建 Dask DataFrame

如何将数据读取到 dask 数据帧并删除坏行

将dask转换为pandas数据框

为啥 dask 的“to_sql”比 pandas 花费更多时间?