python:使用带有scipy linregress

时间:2018-04-20 17:20:40

标签: python pandas scipy

我正在尝试将linregressscipy.stats)与数据帧的2列(两行都有7行)一起使用,但我总是遇到此消息:

 slope, intercept, r_value, p_value, std_err=linregress( sma5_slope[stocks],sma5_slope['counter'])
  File "/usr/lib/python3.6/site-packages/scipy/stats/_stats_mstats_common.py", line 93, in linregress
    ssxm, ssxym, ssyxm, ssym = np.cov(x, y, bias=1).flat
  File "/usr/lib/python3.6/site-packages/numpy/lib/function_base.py", line 3044, in cov
    X = np.concatenate((X, y), axis=0)
ValueError: all the input array dimensions except for the concatenation axis must match exactly

我有一个pandas数据帧sma5,只有一个数据列和索引(= date)。 我正在尝试计算最后7行的斜率,所以我用最后7行创建了一个新的df:

sma5_slope = sma5.iloc[-7:]

添加一个计数器:

sma5_slope['counter'] = range(len(sma5_slope))

然后sma5_slope看起来像像这样:

               TSLA  counter
2018-04-12  297.734        0
2018-04-13  297.942        1
2018-04-16  298.252        2
2018-04-17  294.850        3
2018-04-18  293.334        4
2018-04-19  294.534        5
2018-04-20  293.130        6

然后我将sma5_slope的2列传递给linregress

slope, intercept, r_value, p_value, std_err=linregress( sma5_slope['counter'], sma5_slope[stocks]) 

(我正在循环几个元素,stocks是当前符号。

你能指出我的错误在哪里吗? :) 我认为XY都包含7个元素......?

1 个答案:

答案 0 :(得分:1)

错误消息表明您的2系列有不同的长度。

您可以尝试:

slope, intercept, r_value, p_value, std_err=linregress( sma5_slope['counter'], sma5_slope['TSLA'])

您可以通过打印以下内容进一步确保:

print(len(sma5_slope('counter'))
#should be 7
print(len(sma5_slope('TSLA'))
#should be 7