将pandas列转换为int时的TypeError

时间:2017-08-09 21:12:04

标签: python pandas numpy dataframe

使用pandas数据框,其中一列,比如col1有浮点值,我试图用预定义的常量(比如A)将每个值除以,然后将结果保存为整数值。 / p>

A = 0.5

以下是 col1

中的数据
df["col1"]

0     0.800000
1     0.883333
2     0.883333
3     1.000000
4     1.000000
5     1.300000
6     1.300000
7     1.500000
8     1.500000
9     2.000000
10    2.000000
11    2.500000
12    2.500000

申请后

df["new_col"] = (df["col1"] / A)

它给出了

0     1.600000
1     1.766667
2     1.766667
3     2.000000
4     2.000000
5     2.600000
6     2.600000
7     3.000000
8     3.000000
9     4.000000
10    4.000000
11    5.000000
12    5.000000

这很好,但只要我将 .astype(int)添加到上面的代码中,就可以在索引9和10 处观察到值 3 3 ,而它应分别为4和4。

df["new_col"] = (df["col1"] / A).astype(int)
df["new_col"]

0     1
1     1
2     1
3     2
4     2
5     2
6     2
7     3
8     3
9     3
10    3
11    5
12    5

我试图获得结果的其他方式是

 df["new_col"] = math.floor(df["col1"] / A )

df["new_col"] = int( df["col1"] / A)

这两个都给我TypeError说:

TypeError:无法将系列转换为类'float'  TypeError:无法将系列分别转换为类'int'。

请告诉我如何解决上述问题。

1 个答案:

答案 0 :(得分:1)

你可能有舍入问题。你在内部看到的4.000000可能是3.9999999999,所以你得到了这个结果。 (尝试df.col1-2进行检查。)

您可以尝试(df.round(6)/.5).astype(int)处理您看到的数字,但这是一种解决方法。