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

jer*_*ear 6 python floating-point decimal rounding pandas

我正在使用的系列:

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)
Run Code Online (Sandbox Code Playgroud)

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

df2.apply(round, ndigits=5)
Run Code Online (Sandbox Code Playgroud)

但是,这将引发错误:

追溯(最近一次通话):

df2.apply中第1行的文件“”(舍入,ndigits = 5)

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

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

文件“ 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)
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该如何解决?

小智 4

您尝试过捕获decimal.InvalidOperation异常吗?你应该有一个tryexcept

try:
    # your code 
except DecimalException as e:
    print(e)
Run Code Online (Sandbox Code Playgroud)