我正在尝试将数据框的一列转换为日期时间格式。根据这里的讨论 https://github.com/dask/dask/issues/863,我尝试了以下代码:
import dask.dataframe as dd
df['time'].map_partitions(pd.to_datetime, columns='time').compute()
但是我收到了以下错误信息
ValueError: Metadata inference failed, please provide `meta` keyword
我应该在meta下放什么?应该将df中的所有列的字典放在其中,还是只放'time'列的字典?我应该放哪种类型?我已尝试使用dtype和datetime64,但到目前为止没有起作用。
谢谢您的指导,非常感谢。
更新
我将在此处包含新的错误消息:
1)使用Timestamp
df['trd_exctn_dt'].map_partitions(pd.Timestamp).compute()
TypeError: Cannot convert input to Timestamp
2) 使用 datetime 和 meta
meta = ('time', pd.Timestamp)
df['time'].map_partitions(pd.to_datetime,meta=meta).compute()
TypeError: to_datetime() got an unexpected keyword argument 'meta'
3) 仅使用日期时间:进程卡在2%。
In [14]: df['trd_exctn_dt'].map_partitions(pd.to_datetime).compute()
[ ] | 2% Completed | 2min 20.3s
同时,我希望能够像在pandas中那样指定日期的格式:
pd.to_datetime(df['time'], format = '%m%d%Y'
更新2
升级到Dask 0.11后,我不再遇到元关键字的问题。但是,我仍然无法在一个2GB的数据框中超过2%。
df['trd_exctn_dt'].map_partitions(pd.to_datetime, meta=meta).compute()
[ ] | 2% Completed | 30min 45.7s
更新3
这个方法效果更好:
def parse_dates(df):
return pd.to_datetime(df['time'], format = '%m/%d/%Y')
df.map_partitions(parse_dates, meta=meta)
我不确定这是否是正确的方法。