Pandas Series应用Decimal转换函数出现TypeError的问题求助
问题解决方法
错误原因
你当前的代码错误在于调用apply时,直接将整个Series对象df['numbers']传给了convert_to_decimal的value参数,而该函数的value参数需要单个的int/str值,因此触发了Series无法转换为Decimal的错误。
解决方案
方案1:使用lambda函数处理单个元素并保留NaN
直接通过lambda函数对Series的每个元素逐一处理,同时跳过NaN值:
import pandas as pd from decimal import Decimal def convert_to_decimal(value: str | int, decimals: int) -> Decimal: divisor = 10 ** decimals return Decimal(value) / divisor # 应用到Series df['numbers'] = df['numbers'].apply(lambda x: convert_to_decimal(x, decimals=18) if pd.notna(x) else x)
方案2:修改原函数兼容NaN,再用apply传参
先修改函数使其能识别并返回NaN值,再利用apply的参数传递功能:
import pandas as pd from decimal import Decimal def convert_to_decimal(value: str | int | float, decimals: int) -> Decimal | float: if pd.isna(value): return value divisor = 10 ** decimals return Decimal(value) / divisor # 方法一:用args传递位置参数 df['numbers'] = df['numbers'].apply(convert_to_decimal, args=(18,)) # 方法二:直接传递关键字参数 df['numbers'] = df['numbers'].apply(convert_to_decimal, decimals=18)
内容的提问来源于stack exchange,提问作者Luiz Scheuer
相关产品推荐
相关产品推荐

