【发布时间】:2017-08-09 21:12:03
【问题描述】:
使用 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) 添加到上面的代码中,就可以在 index 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”类。
请告诉我应该如何解决上述问题。
【问题讨论】:
-
奇怪。我在这两个地方都得到了 4,4。
-
我想,我应该重启我的系统再试一次,否则我已经尝试了 10 次代码,它显示了 3 和 3。
-
这可能是一个浮点问题。如果它表示为 3.99999,则 astype 会将其向下舍入为 3。试试
round(0)可能吗? -
@ayhan 我按照你的建议做了,使用 .round(0) ,但问题是它作为一个上限函数工作,它使值像 2.6、2.87 到 3,而我希望它们是2. 我还能尝试什么?
标签: python pandas numpy dataframe