You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:12:42