pandas python - round() 行为不正确
pandas python - round() not behaving correctly
我将数据框中的值四舍五入到小数点后一位。
这是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。
注意:如果我像这样直接将数字插入函数,它 returns 正确的值...
round(3.95,1)
输出
4.0
仅供参考 - 我正在使用 python 版本 2.7.9
有点难回答,因为你列出的不是 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
我怀疑显示内容误导了您。
您提到您正在使用 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 的好处是对整个系列的项目应用单个操作。
我将数据框中的值四舍五入到小数点后一位。
这是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。
注意:如果我像这样直接将数字插入函数,它 returns 正确的值...
round(3.95,1)
输出
4.0
仅供参考 - 我正在使用 python 版本 2.7.9
有点难回答,因为你列出的不是 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
我怀疑显示内容误导了您。
您提到您正在使用 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 的好处是对整个系列的项目应用单个操作。