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

Pandas中dict.get()映射DataFrame值的代码差异及变量指代疑问

关于两段映射代码的差异及疑问解答

嘿,我来帮你拆解清楚这两个代码片段的区别,还有你疑惑的几个点:

1. 两段代码的核心差异

这两段代码功能完全不一致,关键区别在于如何处理字典中没有对应映射的职业值:

代码2:直接用字典映射

fec.contbr_occupation = fec.contbr_occupation.map(occ_mapping)

当你直接把字典传给map()方法时,规则是:

  • 如果DataFrame列中的某个职业值正好是字典的键(key),就替换成对应的字典值(value);
  • 如果这个职业值不在字典的键里,会被直接转换成NaN(缺失值),而不是保留原来的内容。

代码1:用get()方法自定义映射逻辑

f = lambda x: occ_mapping.get(x, x)
fec.contbr_occupation = fec.contbr_occupation.map(f)

这里的lambda函数配合字典的get()方法,实现了更灵活的逻辑:

  • occ_mapping.get(x, x)的意思是:先在字典里找键为x的项,如果找到就返回对应的值;如果找不到,就返回x本身(也就是第二个参数指定的默认值);
  • 最终效果是:只有字典里列出的职业值会被替换,其他所有没有映射的职业值都会保留原来的内容,不会变成缺失值。

2. 关于"pass through"和变量x的含义

  • "pass through"的意思:书中说的这个词就是指那些没有对应映射的职业值,不会被修改,直接“原样通过”映射逻辑,保留原来的取值,不会被替换或转为缺失值。
  • 变量x的指代:你猜的没错!这里的x是指代fec.contbr_occupation这个DataFrame列里的每一个职业值,而不是字典里的内容。map()方法会遍历列中的每一个元素,把每个元素作为参数传给这个lambda函数,所以每次循环的x就是当前处理的那个职业字符串。

额外补充:匹配你的需求

如果你最终的目标是把所有无对应映射的职业都转为"Not Provided",那这两段代码都没完全实现。你需要稍微修改代码1的lambda函数,把默认值改成"Not Provided":

f = lambda x: occ_mapping.get(x, "Not Provided")
fec.contbr_occupation = fec.contbr_occupation.map(f)

这样一来:

  • 字典里的键(比如C.E.O.、INFORMATION REQUESTED等)会被替换成对应的value;
  • 所有不在字典里的职业值,都会被统一转为"Not Provided",正好符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:06:12