Pandas如何映射字典中嵌套元组的索引拆分映射到DataFrame列
Pandas 映射值为元组的字典拆分多列实现方法
不需要为元组内的每个属性单独创建映射字典,基于单个元组值字典即可完成多列映射,以下是两种最常用的实现方式:
方法1:单次映射后直接批量拆分(推荐,代码最简洁)
先通过map拿到存储元组的Series,调用.tolist()将元组序列转为二维列表,可直接赋值给多个目标列,仅需一次字典查找,执行效率最高:
import pandas as pd # 原始元组值字典 Fruit_dict = { 'Apple' : ('red', 'small'), 'Pear' : ('green', 'small'), 'Grapefruit' : ('yellow', 'big') } # 示例DataFrame df = pd.DataFrame({'Fruit': ['Apple', 'Pear', 'Grapefruit', 'Apple']}) # 一行完成两列映射 df[['Color', 'Size']] = df['Fruit'].map(Fruit_dict).tolist()
如果DataFrame里存在字典未覆盖的水果值,可通过dict.get()加默认值避免报错:
# 不存在的键默认返回(None, None),对应列赋值为空值 df[['Color', 'Size']] = df['Fruit'].map( lambda x: Fruit_dict.get(x, (None, None)) ).tolist()
方法2:映射时指定元组索引取值(适合仅需部分属性的场景)
如果不需要提取元组内的所有值,只需要特定位置的属性,可以在map中传入匿名函数,直接按键取值后取对应索引位即可:
# 取元组第0位(索引0)映射为颜色列 df['Color'] = df['Fruit'].map(lambda x: Fruit_dict[x][0]) # 取元组第1位(索引1)映射为尺寸列 df['Size'] = df['Fruit'].map(lambda x: Fruit_dict[x][1])
注意事项
不推荐使用.str[0]这类字符串访问器提取元组元素,该方法是为字符串类型设计的,处理元组时执行效率低,遇到特殊值时容易触发异常。
内容的提问来源于stack exchange,提问作者Dolicho
相关产品推荐
相关产品推荐

