当前位置: 首页 > 面试题库 >

dask dataframe如何将列转换为to_datetime

微生阳平
2023-03-14
问题内容

我正在尝试将数据框的一栏转换为日期时间。在这里的讨论之后,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中还是仅将“时间”列放在字典中?我应该放什么类型?我已经尝试过dtype和datetime64,但到目前为止它们都没有工作。

谢谢,感谢您的指导,

更新资料

我将在此处包括新的错误消息:

1)使用时间戳

df['trd_exctn_dt'].map_partitions(pd.Timestamp).compute()

TypeError: Cannot convert input to Timestamp

2)使用日期时间和元

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

另外,我希望能够在日期中指定格式,就像在熊猫中一样:

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

更新2

更新到Dask 0.11之后,meta关键字不再存在问题。不过,我无法在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)

我不确定这是否正确


问题答案:

采用 astype

您可以使用该astype方法将系列的dtype转换为NumPy dtype

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

也许还有一种方法可以指定Pandas风格的dtype(欢迎编辑)

使用map_partitions和meta

当使用诸如的黑盒方法时map_partitions,dask.dataframe需要知道输出的类型和名称。的docstring中列出了几种执行此操作的方法map_partitions

您可以提供具有正确dtype和名称的空Pandas对象

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

或者,您可以为(name, dtype)Series提供元组或为DataFrame提供dict

meta = ('time', pd.Timestamp)

那一切就好了

df.time.map_partitions(pd.to_datetime, meta=meta)

如果要调用map_partitionsdf则需要为所有内容提供dtypes。但是,在您的示例中情况并非如此。



 类似资料:
  • 问题内容: 我正在从Apache Collections 库中使用。我想对这些值进行排序。 我的方法是使用以下方法检索一个值: 这自然工作正常。 主要问题: 现在,我想知道如何将/转换(不确定哪个是正确的)转换为一个,以便可以对其进行排序? 然后,我打算遍历已排序的对象,该对象应该是有序的,并使用迭代器将位于的列表上的位置从()获取适当的键。 问题答案: 就像Erel Segal Halevi在下

  • 问题内容: 我有以下内容: 然后再: 我收到一个错误: 我尝试了各种方法将QuerySet转换为标准集或列表。没用。 我如何从QuerySet中删除一个项目,以便它不会从数据库中删除它,并且不返回新的QuerySet(因为它处于循环状态,因此无法使用)? 问题答案: 你可以这样做: 在评估QuerySet时阅读,请注意,将整个结果加载到内存中(例如通过list())是不好的。 参考: 关于评论的更

  • 我有一个这样的表,这个表中的所有用户只有两个特性 我想转换为

  • 我正在查看的文档,我看到了方法,但无法直接转到 是否有方法将转换为?

  • 问题内容: 我是Python的新手,需要将列表转换为字典。我知道我们可以将元组列表转换为字典。 这是输入列表: 并且我想将此列表转换为元组列表(或直接转换为字典),如下所示: 我们如何在Python中轻松做到这一点? 问题答案: 您想一次将三个项目分组吗? 您想一次分组N个项目吗?

  • 问题内容: 如何使用Python将列表转换为字符串? 问题答案: 通过使用 或者,如果列表是整数,则在连接元素之前将其转换。