TypeError:+的不支持的操作数类型:'Timestamp'和'float'

时间:2017-07-24 11:14:10

标签: python pandas numpy matplotlib

我有,

x = [2017-06-07, 2017-07-19]
y = [155.98, 151.42]

我想绘制一条直线并找到y截距(第3点)。 现在我正在使用多项式拟合方法绘制线。

x = [2017-06-07, 2017-07-19]
y = [155.98, 151.42]

coefficients = np.polyfit(x, y, 1)
polynomial = np.poly1d(coefficients)
x_axis = np.linspace(2017-06-07, 2017-07-19 + 42 ,3)  #linspace(start, end, num)
y_axis = polynomial(x_axis)
3rd_y_intercept = y_axis[2]
plt.plot(x_axis, y_axis)
plt.plot(x[0], y[0], 'go')
plt.plot(x[1], y[1], 'go')
plt.show()

但是我得到了错误:

  

追踪(最近一次呼叫最后一次):

     

文件“D:/Coding/Line.py”,第3行,

     

系数= np.polyfit(x,y,1)

     

文件“C:\ Users \ Arjun \ Anaconda3 \ lib \ site-packages \ numpy \ lib \ polynomial.py”,第546行,在polyfit中       x = NX.asarray(x)+ 0.0

     

TypeError:+的不支持的操作数类型:'Timestamp'和'float'   但我不知道如何转换Timestamp类型的索引以在多项式中使用它。

注意: x坐标是从Dataframe的索引派生的。并使用datetime模块。 请帮助,并准备使用不同的方法绘制线代替多项式拟合。

2 个答案:

答案 0 :(得分:0)

np.polyfit显然期待纯数值。你可以这样转换你的:

coefficients = np.polyfit(np.asarray(x).astype(float), y, 1)

这会将您的时间戳转换为某种纪元时间,然后您可以根据需要进行拟合并转换回时间戳(更有可能您将使用相同的逻辑将其他X值转换为浮点数,以便您可以制作使用该模型的预测。)

答案 1 :(得分:-1)

如果函数不支持日期时间,那么将它们转换为浮点数可能是最简单的(例如,从t0开始的秒数)。