转换后达斯克“.dt”

  • 本文关键字:dt 转换 dask
  • 更新时间 :
  • 英文 :


我有一个带有时间戳列的 dask 数据帧,我需要从中获取星期几和月份。

这是 ddf 结构

dfs = [delayed(pd.read_csv)(path) for path in glob('../data/20*.zip')]
df = dd.from_delayed(dfs)
meta = ('starttime', pd.Timestamp)
df['start'] = df.starttime.map_partitions(pd.to_datetime, meta=meta)

现在,如果我使用类似的东西 df.head(10).dt.year,它有效(返回一年(。这意味着数据列被转换。

但是,当我尝试获取新列时,它会引发错误: df['dow'] = df['start'].dt.dayofweek(或任何其他".dt"选项,就此而言(:

AttributeError: 'Series' object has no attribute 'dayofweek'

我在这里错过了什么?

我认为你的meta不太正确(它在最新的 dask 和熊猫上为我带来了错误(。这是一个可重现的示例,可以正常工作

In [41]: import numpy as np
In [42]: import pandas as pd
In [43]: import dask.dataframe as dd
In [44]: df = pd.DataFrame({"A": pd.date_range("2017", periods=12)})
In [45]: df['B'] = df.A.astype(str)
In [46]: ddf = dd.from_pandas(df, 2)
In [47]: ddf['C'] = ddf.B.map_partitions(pd.to_datetime, meta=("B", "datetime64[ns]"))
In [48]: ddf.C.dt.dayofweek
Out[48]:
Dask Series Structure:
npartitions=2
0     int64
6       ...
11      ...
Name: C, dtype: int64
Dask Name: dt-dayofweek, 12 tasks
In [49]: ddf.C.dt.dayofweek.compute()
Out[49]:
0     6
1     0
2     1
3     2
4     3
5     4
6     5
7     6
8     0
9     1
10    2
11    3
Name: C, dtype: int64

这对你有用吗?如果没有,您能否编辑您的问题以包含最少的示例?

最新更新