2017-05-15 11 views
0

私はtimestampカラムを持つdaskデータフレームを持っており、それから週と月の曜日を取得する必要があります。ここで変換後に `.dt`を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のようなものを使用している場合、それは(年を返します)動作します。これはdatacolが変換されることを意味します。

私は新しい列を取得しようとすると、しかし、それはエラーが発生します。 df['dow'] = df['start'].dt.dayofweek(またはそのことについては、他の「.DT」オプション):

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

私はここで何をしないのですか?

答えて

2

私はあなたの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 

これは機能しますか?そうでない場合は、最小限の例を含めるように質問を編集できますか?

+0

'map_partitions'を使用する代わりに、' ddf ['C'] = dd.to_datetime(ddf.B) 'を実行することもできます。 –

関連する問題