ValueError:无法将大小为0的序列复制到尺寸为56的数组轴

时间:2018-12-06 23:04:13

标签: python statistics jupyter-notebook

我得到了以下56列,填充了随机数:

dataframe

我想要的是添加一个额外的列,该列与列1-56的自相关具有一定的滞后性。因此,如果延迟为1,则结果为0.42,而延迟为2,则结果为0.06,依此类推。

这是我使用的代码:

def autocorr(x, t):
return np.corrcoef(np.array([x[0:len(x)-t], x[t:len(x)]]))

我想其中,x是数据帧,t是滞后。

但是,当我尝试添加具有lag = 1的自相关的列时,我得到:

df["output"] = autocorr(df,1)

错误:ValueError:无法将大小为0的序列复制到数组轴     尺寸56

我在做什么错,还是有一种更简单的方法来计算具有定义滞后的自相关?

感谢帮助

史蒂芬

更新:我一直在不断尝试调整,但是找不到。有人吗?????

我尝试了以下代码:

def autocorr(x, t):
return np.corrcoef(np.array([x[:len(x)-t], x[t:len(x)]]))

但这给了我错误:

文件“”,第1行     autocorr(df(axis = 1,1))                       ^ SyntaxError:位置参数紧跟关键字参数

1 个答案:

答案 0 :(得分:1)

在我看来,就像函数调用中的括号不匹配一样。如果autocorr(df(axis=1, 1))应该是autocorr(df(axis=1), 1),但pd.DataFrame对象是不可调用的。

pd.Series.autocorr(lag=1)函数不能实现您想要的功能吗?

import pandas as pd, numpy as np
series = pd.Series(np.random.randint(100, high=200, size=56))
print(series.autocorr(lag=1))

得到的值与您期望的值相似。

更新:关于您的原始问题: 由于您有一行len(x)是1,而x[0:len(x)-1]是一个空数组! 加号:在这种情况下,np.corrcoef返回格式为[[1, C], [C, 1]]的2x2矩阵。以这种方式调用您的autocorr函数

df1 = df.copy(deep=True) 
df1["output"] = autocorr(df.T[0], 1)[0, 1]

我不会将结果附加到df,因为这会改变后续计算的结果。