我是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位十进制答案答案 0 :(得分:2)
这不是四舍五入的问题;这是一个展示问题。数字157.6在双精度算术中并不完全可以表示,其代表性的双精度数小于157.6。 Python浮点数和NumPy浮点数在控制台中显示数字时如何处理此问题有所不同。例如:
x = 157.6
df = pd.DataFrame({'a': [x]})
y = df.iloc[0,0]
现在,如果您在控制台中键入x
,则会获得157.6,但如果您键入y
,则会获得157.59999999999999。然而,x == y
是真的。这笔交易是什么?
不同的类型,全部:x是Python float,y是NumPy float,因为它来自数据帧(pandas使用NumPy)。因此,化妆品在外观上的差异。数字是相同的,没有什么可以进行四舍五入。
如何避免丑陋的9s:使用print(y)
,或在您的示例中使用print(Per_capita.iloc[0])
。 print函数将以漂亮的方式显示浮点数,无论是NumPy浮点数还是Python浮点数。
答案 1 :(得分:0)
我相信你正在解决课程作业。如果答案应该是没有任何小数的数字,请使用以下代码:
Per_capita = int(Top15.mean())
如果您需要使用157.6的答案:
Per_capita = Top15.mean()
答案 2 :(得分:0)
这可能与数据157.59999999999999
有关举例如下:
B = 157.59999999999999
print np.round(b,decimals = 0)
print np.round(b,decimals = 1)
print np.round(b,decimals = 4)
158.0
157.6
157.6
如果更改b的值:
B = 157.5932321231341231
print np.round(b,decimals = 0)
print np.round(b,decimals = 1)
print np.round(b,decimals = 2)
158.0
157.6
157.59
这次是有效的,所以这可能取决于数据,.999999
对于数据,小数的结果= 2,3,4,所有结果都是相同的。