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