根据文档,如果上舍入值和下舍入值同样接近原始数字,则Python将值向偶数选择舍入。
我想对pandas.DataFrame
中的值进行四舍五入,使0.5
始终向上舍入。
修复它的一种方法是使用Decimal
数据类型的decimal
模块,如下所述:How to properly round up half float numbers in Python?
import pandas as pd
if __name__ == "__main__":
df = pd.DataFrame(data=[0.5, 1.499999, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5], columns=["orig"])
df["round"] = df.round()
print(df)
其输出:
orig round
0 0.500000 0.0
1 1.499999 1.0
2 1.500000 2.0
3 2.500000 2.0
4 3.500000 4.0
5 4.500000 4.0
6 5.500000 6.0
7 6.500000 6.0
我试着做了这样的事情:
df["round"] = df["orig"].values.astype(Decimal).round()
但这行不通。是否有一个简单且可读的解决方案来确保.5
始终四舍五入?
编辑
我不确定评论中的链接是否回答了这个问题。链接中给出的解决方案是将每个浮点数转换为字符串,并操作字符串,这对于大型 Dataframe 来说似乎是荒谬的。(而且很难读/理解)。我希望有一个简单的函数来使用,就像在decimal
包中一样。
3条答案
按热度按时间s8vozzvw1#
当十进制数为
0.5
时,您可以向orig
添加一些微小的值。这保证了任何整数+ 0.5总是向上舍入到下一个整数。uurv41yg2#
使用
decimal
模块,您可以nc1teljy3#
Pandas的
.round()
方法将奇数单位值向上舍入,偶数单位值向下舍入。你可以在所有值上加0.05来解决这个问题。