【发布时间】:2015-09-21 06:38:12
【问题描述】:
我将数据框中的值四舍五入到小数点后 1 位。
这里是df
Våren 2015 Hösten 2014 Våren 2014
Question
1) Maten är vällagad och smakar bra 4.000000 3.469136 3.678571
Δ 2) Maten ser aptitlig ut 3.883721 3.296296 3.592593
3) Det är en bra variation på grönsakerna 3.365854 2.901235 3.333333
Δ 4) Maten är bra varierad och passar mig 3.725000 3.365854 3.607143
5) Portionsstorleken är lagom 4.166667 3.875000 4.071429
Δ 6) Konsistensen på maten är bra 4.000000 3.468354 3.607143
7) Info om matens innehåll är tydlig 3.950000 3.454545 3.821429
8) Maten levereras i en bra förpackning 3.880952 3.987179 4.214286
9) Jag får den mat jag har beställt 4.166667 4.194805 4.481481
我的代码:
df.applymap(lambda x: round(x,1))
输出
Våren 2015 Hösten 2014 Våren 2014
Question
1) Maten är vällagad och smakar bra 4.0 3.5 3.7
Δ 2) Maten ser aptitlig ut 3.9 3.3 3.6
3) Det är en bra variation på grönsakerna 3.4 2.9 3.3
Δ 4) Maten är bra varierad och passar mig 3.7 3.4 3.6
5) Portionsstorleken är lagom 4.2 3.9 4.1
Δ 6) Konsistensen på maten är bra 4.0 3.5 3.6
7) Info om matens innehåll är tydlig 3.9 3.5 3.8
8) Maten levereras i en bra förpackning 3.9 4.0 4.2
9) Jag får den mat jag har beställt 4.2 4.2 4.5
上面的代码错误地将“Varen 2015”列中的“3.95”四舍五入为 3.9 而不是 4.0。
注意:如果我像这样直接将数字插入函数,它会返回正确的值...
round(3.95,1)
输出
4.0
仅供参考 - 我使用的是 python 版本 2.7.9
【问题讨论】:
-
你能告诉我整个结果吗?对我来说,它在循环中运行良好。
-
从其他数字中收集,可能 3.95 只是像 3.94999999 这样的数字的表示形式,由 numy/panda 内部字符串表示形式四舍五入。相反,当您手动输入 3.95 时,这可能是一个稍微不同的数字。调高numpy/pandas的打印精度,看看
data中的3.95是否还是3.95。 -
@Evert 这可能是一种可能性
-
虽然我无法重现您的问题,但我设法解决了反问题:3.4999999 舍入为 4.0:
data = np.array([1e8/25316455.75]); print(data); print(np.round(data)) \n [ 3.94999999] \n [ 4.] -
这只是浮点行为。如果这是四舍五入的结果,您应该继续使用它,或者如果您觉得您的演示文稿失去精度,则将其四舍五入到更多小数。