我已经导入了大约一个实木复合地板文件。 800MB,约5000万行数据转换为dask数据帧。
一共有5列:DATE, TICKER, COUNTRY, RETURN, GICS
问题:
我只是尝试执行以下操作:
import dask.dataframe as dd
dd.read_parquet('.\abc.gzip')
df['INDUSTRY'] = df.GICS.str[0:4]
n = df.INDUSTRY.unique().compute()
,并且永远需要返回。我在这里做错什么吗?分区会自动设置为1。
我正在尝试做df[df.INDUSTRY == '4010'].compute()
之类的事情,它还需要永远返回或崩溃。
答案 0 :(得分:1)
要回答您的问题:
您不能在读取中将字符串转换为日期,但是,如果使用here文档中的astype
函数,则可以将列转换为日期,如本例所示:
map_partitions
import dask.dataframe as dd
df = dd.read_parquet(your_file)
meta = ('date', 'datetime64[ns]')
# you can add your own date format, or just let pandas guess
to_date_time = lambda x: pd.to_datetime(x, format='%Y-%m-%d')
df['date_clean'] = df.date.map_partitions(to_date_time, meta=meta)
函数将在计算文件时转换镶木地板每个块上的日期,使其功能与读取文件时转换日期相同。
在这里,我想再次使用map_partitions
函数将使您受益,因此您可以尝试使用类似的方法
map_partitions
请注意,如果您运行import dask.dataframe as dd
df = dd.read_parquet('.\abc.gzip')
df['INDUSTRY']df.GICS.map_partitions(lambda x: x.str[0:4], meta=('INDUSTRY', 'str'))
df[df.INDUSTRY == '4010']
,该对象将转换为熊猫。如果文件太大,无法计算,则不会返回任何内容。没有看到数据,很难说更多,但是请结帐these tools来分析您的计算以查看您是否在利用所有CPU。