我有一个具有以下结构的简单数据框:
index = dt (datetime64[ns]), val (float)
dt2 , val2
... , ....
dtN , valN
使用以下方式读取:
import dask.dataframe as dd
import pandas as pd
underlying = dd.read_csv('data.csv',parse_dates=['Date'])
我有一个自定义功能:
def generate_n_day_rolling_vol(df, n_days=30):
return ((pd.np.log(df / df.shift(1))).rolling(n_days).std() * (252. ** .5)).dropna()
现在,我想应用expanding window calculation,但是看到dask不支持扩展,仅支持rolling。
因此,要实现一种扩展的calc,我想进行滚动,但窗口大小应等于我数据帧的长度,并且min_periods
应该很小。
这看起来像:
rolling_obj = underlying[['val']].rolling(len(data['val']),min_periods=100)
然后我申请:
x=rolling_obj.apply(pd.DataFrame.std)
当我想通过运行x.head()
查看结果时,会得到:
~/anaconda2/envs/options_analytics/lib/python3.5/site-packages/pandas/core/generic.py in stat_func(self, axis, skipna, level, ddof, numeric_only, **kwargs)
9626 skipna = True
9627 if axis is None:
-> 9628 axis = self._stat_axis_number
9629 if level is not None:
9630 return self._agg_by_level(name, axis=axis, level=level,
AttributeError: 'numpy.ndarray' object has no attribute '_stat_axis_number'
我在这里做错了什么?我真的很想使用dask并认为我必须做一些新手。
谢谢