我正在使用的系列:
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)
为什么会这样?我该如何解决?
答案 0 :(得分:1)
您是否尝试捕获decimal.InvalidOperation
异常?您应该有一个try
和except
。
try:
# your code
except DecimalException as e:
print(e)