将浮点型转换为整型时的四舍五入 [英] pandas rounding when converting float to integer

查看:29
本文介绍了将浮点型转换为整型时的四舍五入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

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’或‘SIGNED’:最小有符号整型dtype

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

如果要舍入,则需要进行浮点舍入,然后转换为int:

df.round(0).astype(int)

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

这篇关于将浮点型转换为整型时的四舍五入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆