我有一个相对干净的数据集,有两列没有间隙,快照如下所示:
我运行以下代码行:
correlation = pd.rolling_corr(data['A'], data['B'], window=120)
由于某种原因,这会输出一个数据帧(如下图所示),其中有很大的间隙:
我之前没有亲自见过这个问题,在查看数据(不仅仅是代码)之后我不确定该问题是什么?
答案 0 :(得分:0)
您在correlation
变量中获得NAN值,其中行数小于window
属性的值。
import pandas as pd
import numpy as np
data = pd.DataFrame({'A':np.random.randn(10), 'B':np.random.randn(10)})
correlation = pd.rolling_corr(data['A'], data['B'], window=3)
print correlation
0 NaN
1 NaN
2 0.852602
3 0.020681
4 -0.915110
5 -0.741857
6 0.173987
7 0.874049
8 -0.874258
9 -0.835340
docs for this function在min_periods
属性部分中对此进行了警告:"获得值所需的窗口中的最小观察次数(否则结果为NA)。"
默认None
似乎不起作用,因为除非您为此设置了值,否则您认为自己不会看到NaN。
答案 1 :(得分:0)
这是因为时间序列中缺少日期,周末等。您的示例中的证据是7/2/2003 - > 2003年10月2日。一种解决方案是通过重新索引时间序列数据帧来填补这些空白。
df.index = pd.DatetimeIndex(df.index) # required
df = df.asfreq('D') # reindex will include missing days
df = df.fillna(method='bfill') # fill / interpolate NaNs
corr = df.A.rolling(30).corr(df.B) # no gaps