dask dataframe如何将列转换为_datetime

我正在尝试将数据帧的一列转换为datetime。在这里讨论之后https://github.com/dask/dask/issues/863 我尝试了以下代码:

将dask.dataframe作为dd导入
df['time'].map_分区(pd.to_datetime,columns='time').compute()

但我收到了以下错误消息

ValueError:元数据推断失败,请提供'meta'关键字

我到底应该在meta下放什么?我应该在df中列出所有列的字典,还是只列出“时间”列的字典?我应该放什么类型的?我试过dtype和datetime64,但到目前为止它们都不起作用

谢谢你,我感谢你的指导

更新

我将在这里包括新的错误消息:

1) 使用时间戳

df['trd_exctn_dt'].map_分区(pd.Timestamp).compute()
TypeError:无法将输入转换为时间戳

2) 使用datetime和meta

meta=('time',pd.Timestamp)
df['time'].map_分区(pd.to_datetime,meta=meta).compute()
TypeError:to_datetime()获得意外的关键字参数“meta”

3) 仅使用日期时间:停留在2%

[14]on

:df['trd_exctn_dt'].映射分区(pd.to_datetime).compute()
[]在20.3分钟内完成2%

此外,我希望能够在日期中指定格式,就像我在熊猫中所做的那样:

pd.to_datetime(df['time'],格式='%m%d%Y'

更新2

在升级到Dask 0.11之后,我不再有meta关键字的问题。但是,在2GB数据帧上,我无法使它超过2%

df['trd\u exctn\u dt'].映射分区(pd.to\u datetime,meta=meta).compute()
[]完成2%| 30分钟45.7秒

更新3

这样做效果更好:

def解析日期(df):
将pd.to_datetime(df['time'],格式='%m/%d/%Y')
映射分区(解析日期,meta=meta)

我不确定这是否是正确的方法

使用aType

您可以使用astype方法将序列的数据类型转换为NumPy数据类型

df.time.astype('M8[us]”)

可能还有一种方法可以指定熊猫样式的数据类型(欢迎编辑)

使用map_分区和元分区

当使用诸如map\u partitions之类的黑盒方法时,dask.dataframe需要知道输出的类型和名称。在map\u partitions的docstring中列出了几种方法

可以提供具有正确数据类型和名称的空对象

meta=pd.Series([],name='time',dtype=pd.Timestamp)

或者,您可以为序列提供(名称、数据类型)元组,或为数据帧提供dict

meta=('time',pd.Timestamp)

那么一切都会好起来的

df.time.map\u分区(pd.to\u datetime,meta=meta)

如果您在df上调用map\u partitions,那么您需要为所有内容提供数据类型。但在您的示例中并非如此

发表评论