我正在尝试将linregress
(scipy.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
是当前符号。
你能指出我的错误在哪里吗? :)
我认为X
和Y
都包含7个元素......?
答案 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