将浮点数转换为整数时的熊猫舍入
问题:将浮点数转换为整数时的熊猫舍入 我有一个带有浮点(十进制)索引的 pandas DataFrame,我用它来查找值(类似于字典)。由于浮点数并不完全是它们应该乘以 10 并将其转换为整数.astype(int)的值,然后再将其设置为索引。然而,这似乎做了一个floor而不是四舍五入。因此 1.999999999999999992 被转换为 1 而不是 2。之前使用pandas.DataFra
·
问题:将浮点数转换为整数时的熊猫舍入
我有一个带有浮点(十进制)索引的 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)
向零转换:
“整数”或“有符号”:最小的有符号 int dtype
来自pandas.to_numeric 文档(从astype()
链接到数字转换)。
如果要四舍五入,则需要先进行浮点型舍入,然后再转为int:
df.round(0).astype(int)
根据您的需要使用其他舍入函数。
更多推荐
已为社区贡献126473条内容
所有评论(0)