pandas python round()运行不正常

2024-09-29 01:34:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我将数据帧中的值舍入到小数点后1位。在

这是测向仪

                                            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

我的代码:

^{pr2}$

输出

                                            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

FYI-im使用python版本2.7.9


Tags: serenquestiondetutgrvariationren
2条回答

这有点难以回答,因为您列出的不是数据帧,也不是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]])

编辑在更新您的问题之后,我怀疑还有其他问题。许多浮点数不能以有限的小数位数显示。在

试着跑步

^{pr2}$

或者

df['Våren 2015'] - 3.95

我怀疑显示器误导了你。在

你提到你正在使用熊猫数据帧。我无法重现你看到的行为:

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的好处是将单个操作应用于整个系列的项。在

相关问题 更多 >