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

使用lambda的defaultdict在Pandas map时报错:TypeError参数缺失

问题分析与解决

错误原因

你遇到的TypeError是因为defaultdict的默认工厂函数定义错误:

  • 当pandas的map方法使用字典(包括defaultdict)时,会对每个元素执行dict[x]操作
  • 当元素x不在defaultdict的键中时,defaultdict会调用你传入的默认工厂函数,但你写的lambda x: x.replace('$','')要求必须传入一个参数,而defaultdict调用默认工厂函数时不会传递任何参数,因此触发参数缺失的错误。

正确实现方式

方式1:用dict.get()替代defaultdict(推荐)

直接给map传一个lambda函数,利用字典的get方法处理匹配与未匹配的情况,代码更简洁直观:

d = {
    "$1": 500,
    "$1,001": 2500, 
    "$15,001": 32500,
    "$50,001": 75000,
    "$100,001": 175000,
    "$250,001": 350000,
    "$500,001": 750000,
    "$1,000,001": 2000000, 
    "$5,000,001": 10000000,
    "25,000,001": 25000000  
}

z.map(lambda x: d.get(x, x.replace('$', '')))

d.get(x, 默认值)会先尝试从字典中取x对应的值,取不到时返回后面的默认值(这里是去掉$后的字符串)。

方式2:自定义defaultdict类(如果一定要用defaultdict)

如果坚持要用defaultdict,需要重写它的__missing__方法,这个方法会在键不存在时被调用,并且会接收当前的键作为参数:

from collections import defaultdict

class CustomDefaultDict(defaultdict):
    def __missing__(self, key):
        # 键不存在时,返回去掉$后的结果
        return key.replace('$', '')

amt_map = CustomDefaultDict(d)
z.map(amt_map)

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:45:04