Python 将列转换为int时出现TypeError

Python 将列转换为int时出现TypeError,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,使用pandas数据帧,其中一列(比如col1)有浮点值,我试图用预定义的常量(比如a)除以这些值,然后将结果保存为整数值 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.0

使用pandas数据帧,其中一列(比如col1)有浮点值,我试图用预定义的常量(比如a)除以这些值,然后将结果保存为整数值

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 )

这两个都给了我一个错误的提示:

TypeError:无法将序列转换为类“float” TypeError:无法将序列分别转换为类“int”


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

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


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

Wierd。我在两个位置都得到了4,4。我想,我应该重新启动我的系统,然后再试一次,否则我已经尝试了10次代码,它显示了3和3。这可能是一个浮点问题。如果它表示为3.99999,astype将把它四舍五入为3。尝试
round(0)
maybe?@ayhan我按照你的建议使用了.round(0),但问题是它是一个上限函数,它的值是2.6、2.87到3,而我希望它们是2。我还可以尝试什么?如果以上列中的所有值都是负数,那么在-3.999999的情况下,它将四舍五入到-4?继续这种方式是危险的。我想如果你的计算结果是3.999,而4是好的结果,你必须重构这部分。我仍然在努力解决这个问题,现在列中的一个值是-7.680000,我将它除以0.04000,它应该是-192,但我得到-191,这影响了我的整体结果。请推荐你提到的重构部分。很抱歉,以前没有遇到过此类问题,所以解决方案不足。我有一个列,它只有一个负的浮点数,我将用另一个正的浮点数除,然后只保留结果的整数部分(比如下限而不是上限)。
df["new_col"] = int( df["col1"] / A)