四舍五入序列中的值时,decimal.InvalidOperation错误

时间:2018-08-10 20:07:16

标签: python pandas floating-point decimal rounding

我正在使用的系列:

import pandas as pd
from decimal import Decimal, BasicContext

df = pd.Series([14978.22,
16025.429160000002,
209.97803999999996,
618.20369,
605.607,
1431.0916,
30.53575,
23.77272,
404.79368999999997,
55580.152319999994
])
df2 = df.apply(str).apply(Decimal, context=BasicContext)

我想使用“ ROUND_HALF_UP”将df中的所有值四舍五入(这是用于BasicContext的舍入)。所以,我这样做:

df2.apply(round, ndigits=5)

但是,这会引发错误:

  

回溯(最近通话最近一次):

     

文件“”,第1行,在       df2.apply(round,ndigits = 5)

     

文件   “ C:\ Users \ Guest \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ core \ series.py”,   第3194行,适用       映射= lib.map_infer(值,f,convert = convert_dtype)

     

文件“ pandas / _libs / src \ inference.pyx”,第1472行,在   pandas._libs.lib.map_infer

     

文件   “ C:\ Users \ Guest \ AppData \ Roaming \ Python \ Python36 \ site-packages \ pandas \ core \ series.py”,   第3181行,在       f = lambda x:func(x,* args,** kwds)

     

InvalidOperation:类'decimal.InvalidOperation'

但是,四舍五入到四位数有效:

df2.apply(round, ndigits=4)

为什么会这样?我该如何解决?

1 个答案:

答案 0 :(得分:1)

您是否尝试捕获decimal.InvalidOperation异常?您应该有一个tryexcept

try:
    # your code 
except DecimalException as e:
    print(e)