Python如何提取字典内列表首元素并添加为Pandas DataFrame新列
实现方法
你之前的写法错误原因是:pandas.Series.map()需要传入映射关系或者可调用对象,你写的dict[WHAT HERE][0]是固定值表达式,代码运行时就会直接执行,不会逐行匹配key列的取值。
可直接运行的正确代码
注意不要用dict做变量名,会覆盖Python内置的字典类型,示例中替换为val_map:
val_map = {"key 1": ["val 1", "val 2"], "key 2": ["val 3", "val 4", "val 5"], "key 3": ["val 6", "val 7"] } df['first_key'] = df['key'].map(lambda current_key: val_map[current_key][0])
运行后就能得到你预期的输出结果:
key first_key 0 key 1 val 1 1 key 2 val 3 2 key 3 val 6
逻辑说明
- 传入
map的lambda匿名函数会逐行遍历key列,把每一行的键值作为current_key参数传入 - 先通过
val_map[current_key]取到键对应的列表,再取索引为0的第一个元素作为新列的值
容错版本
如果DataFrame里可能存在字典中不存在的键,可以加默认值避免报KeyError:
# 匹配不到的键对应位置填充None df['first_key'] = df['key'].map(lambda current_key: val_map.get(current_key, [None])[0])
内容的提问来源于stack exchange,提问作者juanpethes
相关产品推荐
相关产品推荐

