Python 四舍五入问题

Python 四舍五入问题,python,pandas,decimal,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.

我对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位小数的答案,我相信你正在解决coursera作业。如果答案应该是没有小数的数字,请使用以下代码:

Per_capita = int(Top15.mean())
如果您需要157.6的答案,请使用:

Per_capita = Top15.mean()

这不是四舍五入的问题;这是一个展示的问题。数字157.6在双精度算术中不可精确表示,其代表的双精度数字略小于157.6。Python浮点和NumPy浮点在控制台中显示数字时如何处理这个问题上有所不同。例如:

x = 157.6
df = pd.DataFrame({'a': [x]})
y = df.iloc[0,0]
现在,如果在控制台中键入
x
,则得到157.6,但如果键入
y
,则得到157.599999999。然而,
x==y
是正确的。怎么回事

不同的类型,仅此而已:x是Python浮点,y是NumPy浮点,因为它来自数据帧(pandas在引擎盖下使用NumPy)。因此,外观上的差异。数字是一样的,没有什么可以舍入的


如何避免丑陋的9:使用
print(y)
,或者在您的示例中使用
print(pero_capital.iloc[0])
。print函数将以一种很好的方式显示浮点,可以是NumPy浮点或Python浮点

这可能与数据157.5999999999有关

举例如下:

b=157.599999999

打印np.四舍五入(b,小数=0)

打印np.四舍五入(b,小数=1)

打印np.四舍五入(b,小数=4)

158.0

157.6

157.6

如果更改b的值:

b=157.5932321231341231

打印np.四舍五入(b,小数=0)

打印np.四舍五入(b,小数=1)

打印np.四舍五入(b,小数=2)

158.0

157.6

157.59

这段时间有效,因此这可能取决于数据.999999


对于数据,小数=2,3,4的结果是相同的。

欢迎使用StackOverflow。有一个问题我遗漏了吗?很抱歉,我在寻找一个2位小数的答案。所以前15位是数据帧,我想使用一个特定的列。因此,我使用了:
code
Top15['Energy Supply Perician'].mean()。仍然获得相同的值mean()函数可以在系列和数据帧中调用。如果您编辑您的问题以包含DataFrame的完整信息,这将非常有用。非常感谢您,修复了它。但评分员仍然认为答案不正确。哦,不知道我还能做什么。你也可以用
float(peror_capital.iloc[0])
转换成Python float,尽管我不知道评分器是如何工作的。