转换后的Dask`.dt`

转换后的Dask`.dt`,dask,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) 现在,如果我

我有一个带有时间戳列的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”选项):


我在这里遗漏了什么?

我认为你的
meta
不太正确(在最新的dask和pandas上,这给我带来了一个错误)。这里有一个可重复使用的例子

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

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

我认为您的
不太正确(这给我在最新的dask和pandas上带来了一个错误)。这里有一个可重复使用的例子

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

这对你有用吗?如果没有,您可以编辑您的问题以包含一个最小的示例吗?

请注意,您也可以使用
ddf['C']=dd.to_datetime(ddf.B)
而不是使用
map_分区
。请注意,您也可以使用
ddf['C']=dd.to_datetime(ddf.B)
而不是使用
map_分区