python - 将 float 转换为整数时的 Pandas 四舍五入

标签 python pandas floating-point int rounding

我有一个带有 float (十进制)索引的 pandas DataFrame,我用它来查找值(类似于字典)。由于 float 不完全是它们应该乘以 10 的值并将其转换为整数 .astype(int) 在将其设置为索引之前。然而,这似乎做了一个 floor 而不是四舍五入。因此 1.999999999999999992 被转换为 1 而不是 2。之前使用 pandas.DataFrame.round() 方法进行舍入并不能避免这个问题,因为值仍然存储为 float 。

最初的想法(这显然引起了一个关键错误)是这样的:

idx = np.arange(1,3,0.001)
s = pd.Series(range(2000))
s.index=idx
print(s[2.022])

尝试转换为整数:

idx_int = idx*1000
idx_int = idx_int.astype(int)
s.index = idx_int
for i in range(1000,3000):
    print(s[i])

输出总是有点随机,因为整数的“实际”值可能略高于或低于所需值。在这种情况下,索引包含值 1000 的两倍并且不包含值 2999。

最佳答案

你是对的,astype(int) 进行了向零的转换:

‘integer’ or ‘signed’: smallest signed int dtype

来自 pandas.to_numeric documentation (从 astype() 链接用于数字转换)。

如果要取整,需要做一个float取整,然后转成int:

df.round(0).astype(int)

根据您的需要使用其他舍入函数。

关于python - 将 float 转换为整数时的 Pandas 四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49153253/

相关文章:

python - 将字符串中的所有字符转换为python中的ascii hex

python - 如何防止反编译或检查 python 代码?

pandas - 绘制包含 NaN 的 Pandas 数据框

python - 正确确定比例因子

c - 为什么 printf ("value: %f",10/2);输出 0.000000?

python - 为什么 yaml 包没有安装在 conda env 中?

python - 谷歌存储上 bucket() 和 get_bucket() 的区别

python , Pandas : GroupBy attributes documentation

python - Pandas 系列卓越

c++ - 四舍五入到 C 中的次奇数或偶数整数