【问题标题】:TypeError: unsupported operand type(s) for +: 'Timestamp' and 'float'类型错误:+ 不支持的操作数类型:“时间戳”和“浮点数”
【发布时间】:2017-12-29 22:56:35
【问题描述】:

我有,

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()

但出现错误:

Traceback(最近一次调用最后一次):

文件 "D:/Coding/Line.py", line3, in

系数 = 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 模块。 请帮忙,并准备使用不同的方法来画线代替多项式拟合。

【问题讨论】:

  • x = [2017-06-07 00:00:00, 2017-07-19 00:00:00] 会抛出 SyntaxError: invalid syntax。
  • 请提供最低限度的工作示例。否则没有人能帮上忙。删除回答您的问题不需要的所有内容,例如只保留添加和 Timestamp 对象。首先尝试解释为什么需要添加。那我相信你会有正确有用的答案。
  • x = [2017-06-07, 2017-07-19] 计算结果为 x = [2004,1991]。代码与报告的错误不匹配。请参阅minimal reproducible example
  • @BlueQuant,np。请不要将反对票视为惩罚,而是将其视为编写更好问题的可能改进。 SO 的社区有时对新手有点苛刻。只要继续努力! IMO,从长远来看是值得的。
  • @OwlMax 哈哈,没问题,我会以积极的方式接受它,我会遵守规则。

标签: python pandas numpy matplotlib


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答。我用你所说的替换了..它正在抛出 AttributeError: 'list' object has no attribute 'astype'。我是python新手,请您详细说明一下,任何帮助将不胜感激,再次感谢。
  • @BlueQuant:好的,我更新了我的答案。我没有意识到您的实际输入不是 NumPy 数组。现在它应该可以工作了。
  • 现在说,float() 参数必须是字符串或数字,而不是 'Timestamp' :(
  • @BlueQuant:你为什么不发布一个完整的、实际工作的示例程序和实际的示例数据?现在,您发布的示例无法运行,有效的 Python。
  • 我明白了。您正在两个 2D 点之间拟合一条线。你根本不需要这个功能——只需手动完成!找到两点之间直线的斜率非常容易,对吧?只需减法和除法。
【解决方案2】:

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

【讨论】:

  • 你能解释一下怎么做吗?
猜你喜欢
  • 2018-10-29
  • 2015-08-04
  • 2020-07-12
  • 2019-07-12
  • 1970-01-01
  • 2022-06-17
  • 2014-06-15
  • 2012-11-01
  • 2019-04-08
相关资源
最近更新 更多