类型错误:无法将系列转换为 <class 'float'>

新手上路,请多包涵

我有一个看起来像的数据框(df):

 date                 A
2001-01-02      1.0022
2001-01-03      1.1033
2001-01-04      1.1496
2001-01-05      1.1033

2015-03-30    126.3700
2015-03-31    124.4300
2015-04-01    124.2500
2015-04-02    124.8900

对于整个时间序列,我试图将今天的价值除以昨天,并使用以下内容记录结果:

 df["B"] = math.log(df["A"] / df["A"].shift(1))

但是我收到以下错误:

 TypeError: cannot convert the series to <class 'float'>

我怎样才能解决这个问题?我尝试使用以下方法转换为 float:

 df["B"] .astype(float)

但是什么也做不了。

原文由 Stacey 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 6k
2 个回答

您可以改用 numpy.log。 Math.log 需要一个数字,而不是数组。

原文由 user3582076 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 lambda 运算符将函数应用于 pandas 数据框或系列。更具体地说,如果您想将列中的每个元素转换为浮点数,您应该这样做:

 df['A'].apply(lambda x: float(x))

这里 lambda 运算符将获取该列上的值(作为 x)并将它们作为浮点值返回。

原文由 cemosambora 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题