python - 舍入问题

标签 python pandas decimal

我对 python 很陌生,在这个问题上遇到了困难。 我必须从数据框中获取以下信息并提供其平均值[答案应该返回一个数字]

这是数据框中的列:

   Country
China                  93.0
United States         286.0
Japan                 149.0
United Kingdom        124.0
Russian Federation    214.0
Canada                296.0
Germany               165.0
India                  26.0
France                166.0
South Korea           221.0
Italy                 109.0
Spain                 106.0
Iran                  119.0
Australia             231.0
Brazil                 59.0
Name: Energy Supply per Capita, dtype: float64

现在使用以下内容:

Per_capita = Top15.loc[:,['Energy Supply per Capita']].mean()
Per_capita.iloc[0]

我得到:

157.59999999999999

所以我尝试使用round函数:

Per_capita = Per_capita.round(decimals = 1)

如果我有任何小数位,我仍然会得到相同的输出。仅当我将小数设为 0 时它才会发生变化,并且给出 158,我假设这不是他们正在寻找的答案。

如果我不使用 iloc 函数,我会得到一个很好的小数点后 1 的答案

Energy Supply per Capita    157.6

我想得到上述问题的 2 位小数答案

最佳答案

这不是四舍五入的问题;这是显示的问题。数字157.6在 double 算术中不能精确表示,其代表性 double 字略小于157.6。 Python float 和 NumPy float 在控制台中显示数字时处理此问题的方式有所不同。示例:

x = 157.6
df = pd.DataFrame({'a': [x]})
y = df.iloc[0,0]

现在,如果您在控制台中输入 x,您将得到 157.6,但如果您输入 y,您将得到 157.59999999999999。然而,x == y 是 True。这是怎么回事?

不同的类型,仅此而已:x是Python float ,y是NumPy float ,因为它来自数据帧(pandas在底层使用NumPy)。因此,外观上存在化妆品差异。数字是相同的,无需进行四舍五入。

如何避免丑陋的 9:使用 print(y),或者在您的示例中使用 print(Per_capita.iloc[0])。 print 函数将以一种很好的方式呈现 float ,无论是 NumPy float 还是 Python float 。

关于python - 舍入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41582903/

相关文章:

c# - 为什么我的数字从小数转换为 float 时会发生变化?

c - 在C中显示 float 的小数位

python - python中多个集合的并集

python3 pip 无法在 Windows 10 上安装 jupyter

python - 重新排序行数据

python - Pandas 在 groupby.apply(..) 之后删除组列

sql-server - 将值赋给 Null 在十进制类型上抛出错误

python - 使用 python 脚本填充数据库

用于创建可处理数百万行的 XLSX 文档的 Python(或 C)库

python - 如何将字典转换为 pandas df?