【问题标题】:AttributeError: 'list' object has no attribute 'dtype'AttributeError:“列表”对象没有属性“dtype”
【发布时间】:2016-05-14 05:02:56
【问题描述】:

我在使用布林带算法时遇到问题。我想将此算法应用于我的时间序列数据。

代码:

length = 1440

dataframe = pd.DataFrame(speed)

ave = pd.stats.moments.rolling_mean(speed,length)

sd = pd.stats.moments.rolling_std(speed,length=1440)

upband = ave + (sd*2)

dnband = ave - (sd*2)

print np.round(ave,3), np.round(upband,3), np.round(dnband,3)

输入:

speed=[96.5, 97.0, 93.75, 96.0, 94.5, 95.0, 94.75, 96.0, 96.5, 97.0, 94.75, 97.5, 94.5, 96.0, 92.75, 96.5, 91.5, 97.75, 93.0, 96.5, 92.25, 95.5, 92.5, 95.5, 94.0, 96.5, 94.25, 97.75, 93.0]

“ave”变量的结果:

[1440 行 x 1 列] 0 0 南 1 南 2 钠 3 钠 4 南 5 南 6 南 7 南 8 南 9 南 10 南 11 南 12 南 13 南 14 南 15 南 16 南 17 NaN

【问题讨论】:

  • 据我了解 rolling_mean 的文档,您应该将 Series 或 DataFrame 传递给 rolling_mean 而不是列表。 (见pandas.pydata.org/pandas-docs/stable/generated/…
  • 谢谢,我把list转成df了,现在又报错了。由于 ave 和 sd 变量,我得到了 NaN 结果。 @StefanReinhardt
  • 这是长度属性引起的...
  • 如果您还有其他问题,请打开另一个问题。当你解决一个问题并找到另一个问题时,不要改变你的问题。

标签: python list pandas time time-series


【解决方案1】:

第一点是,正如我在评论中已经提到的 rolling_mean 需要一个 DataFrame 您可以通过插入行来实现这一点

speed = pd.DataFrame(data=speed) 

ave = ... 行之前。 尽管如此,您也错过了在 rolling_std 中定义 window 属性 (见:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.rolling_std.html

【讨论】:

  • 我添加了 speed = pd.DataFrame(data=speed) 但我再次得到 NaN 结果。 @StefanReinhardt
猜你喜欢
  • 2021-06-06
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 2021-07-05
  • 2018-01-16
相关资源
最近更新 更多