TypeError:无法将系列转换为<class'float'=“”>

时间:2017-03-23 22:44:32

标签: python python-3.x

我的数据框(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'>

请问有人让我知道如何解决这个问题吗?我试图使用以下方式进行浮动:

df["B"] .astype(float)

但是无法解决任何问题。任何指导都将非常感谢。

由于

5 个答案:

答案 0 :(得分:10)

您可以使用numpy.log。 Math.log期待一个数字,而不是数组。

答案 1 :(得分:7)

您可以使用lambda运算符将函数应用于熊猫数据框或系列。更具体地说,如果要将列中的每个元素都转换为浮点数,则应执行以下操作:

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

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

答案 2 :(得分:0)

如果您只是写df["A"].astype(float),则不会更改df。您需要将astype方法调用的输出分配给其他内容,包括使用df['A'] = df['A'].astype(float)分配给现有系列。另外你可能想要使用numpy作为@ user3582076建议,或者在系列上使用.apply,因为将今天的值除以昨天的值。

答案 3 :(得分:0)

我遇到了同样的问题,对我来说,答案是看为什么我首先拥有系列剧的原因。在花了很长时间寻找如何将系列更改为不同的分配数据类型后,我意识到我在数据框中两次定义了相同的列名,这就是为什么要创建一个系列。

删除列名的意外重复可消除此问题:)

答案 4 :(得分:0)

我使用的方式不同,但与@cemosambora相同

(df.A).apply(lambda x: float(x)) 这里,df是熊猫数据框,A是列名