2017-05-15 4 views
0

timestamp 열이있는 dask 데이터 프레임이 있는데, 그 중 요일과 달을 가져와야합니다. 내가 df.head(10).dt.year 같은 것을 사용하는 경우 여기 전환 후 Dask`.dt`

그것은 (년 반환) 작동, 이제 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) 

입니다. 이는 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)'를 할 수 있습니다. –