我将数据框中的值四舍五入到小数点后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
上面的代码错误地围绕' 3.95'在专栏' Varen 2015'到3.9而不是4.0。
注意:如果我将数字直接插入到函数中,它会返回正确的值...
round(3.95,1)
输出
4.0
仅供参考 - 我正在使用python版本2.7.9
答案 0 :(得分:1)
回答有点困难,因为你列出的不是DataFrame,不是Python列表等等。
但是,您应该注意,在循环中可能没有理由这样做,因为它可以通过矢量(并且正确)完成:
import numpy as np
data = [[ 4., 3.4691358, 3.67857143],
[ 3.88372093, 3.2962963, 3.59259259],
[ 3.36585366, 2.90123457, 3.33333333],
[ 3.725, 3.36585366, 3.60714286],
[ 4.16666667, 3.875, 4.07142857],
[ 4., 3.46835443, 3.60714286],
[ 3.95, 3.45454545, 3.82142857],
[ 3.88095238, 3.98717949, 4.21428571],
[ 4.16666667, 4.19480519, 4.48148148]]
>> np.array(data).round(1)
array([[ 4. , 3.5, 3.7],
[ 3.9, 3.3, 3.6],
[ 3.4, 2.9, 3.3],
[ 3.7, 3.4, 3.6],
[ 4.2, 3.9, 4.1],
[ 4. , 3.5, 3.6],
[ 4. , 3.5, 3.8],
[ 3.9, 4. , 4.2],
[ 4.2, 4.2, 4.5]])
修改在您的问题更新后,我怀疑还有其他问题。许多浮点数不能真正以有限的小数显示。
尝试运行
df['Våren 2015'] < 3.95
或
df['Våren 2015'] - 3.95
我怀疑显示器误导了你。
答案 1 :(得分:1)
您提到您正在使用pandas数据帧。我无法重现您所看到的行为:
In [29]: data
Out[29]:
c1 c2 c3
0 4.000000 3.469136 3.678571
1 3.883721 3.296296 3.592593
2 3.365854 2.901235 3.333333
3 3.725000 3.365854 3.607143
4 4.166667 3.875000 4.071429
5 4.000000 3.468354 3.607143
6 3.950000 3.454545 3.821429
7 3.880952 3.987179 4.214286
8 4.166667 4.194805 4.481481
In [30]: data.__class__
Out[30]: pandas.core.frame.DataFrame
In [31]: for index, row in data.iterrows():
for cell in row:
print(str(cell) + ': ' + str(round(cell,1)))
....:
4.0: 4.0
3.4691358: 3.5
3.67857143: 3.7
3.88372093: 3.9
3.2962963: 3.3
3.59259259: 3.6
3.36585366: 3.4
2.90123457: 2.9
3.33333333: 3.3
3.725: 3.7
3.36585366: 3.4
3.60714286: 3.6
4.16666667: 4.2
3.875: 3.9
4.07142857: 4.1
4.0: 4.0
3.46835443: 3.5
3.60714286: 3.6
3.95: 4.0
3.45454545: 3.5
3.82142857: 3.8
3.88095238: 3.9
3.98717949: 4.0
4.21428571: 4.2
4.16666667: 4.2
4.19480519: 4.2
4.48148148: 4.5
正如Ami正确指出的那样,没有必要迭代矩阵,使用numpy的好处是将一个操作应用于整个系列的项目。