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

Pandas DataFrame根据映射为列表列生成新列及报错解决

报错原因

你触发TypeError: 'Series' object is not callable的核心问题是:Python内置map()函数的第一个参数必须是可调用对象(函数、实现了__call__方法的对象),你传入的df2.set_index('Site')['cells']是Pandas Series类型,本身不可被调用,因此直接传给map()时会报错。
另外你原写法每次执行lambda都会重新给df2做一次set_index,重复计算拉低性能,完全没必要。

正确实现代码

先提前构建站点和cells值的映射字典,仅需计算一次,性能更高:

# 构建Site到cells的键值对映射
site_cell_map = df2.set_index('Site')['cells'].to_dict()

# 逐行遍历Sites列的列表,匹配对应cells值生成新列
df1['Cells'] = df1['Sites'].apply(lambda site_list: [site_cell_map[s] for s in site_list])

执行后得到的结果完全匹配预期:

Sites      Cells
0                 ['a']        [2]
1  ['b', 'c', 'a', 'd']  [4, 3, 2, 5]
2                 ['c']        [3]
补充说明

如果一定要用内置map()写法,需要把取值逻辑写成可调用的lambda函数,但是可读性和执行效率都不如上面的列表推导式写法,不推荐:

df1['Cells'] = df1['Sites'].apply(lambda x: list(map(lambda s: site_cell_map[s], x)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:42:28