Python如何从DataFrame提取键值对 按名称匹配分数避免硬编码

iloc是纯按行、列的物理位置取值,只要DataFrame发生行排序、插入删除、筛选重置等操作,位置和实际值的对应关系就会错位。要实现按名称匹配对应分数、完全不受行顺序影响,有两种常用实现方案:
方案1:单次查询指定名称分数
通过布尔筛选匹配目标名称所在行,再取对应分数列的值,和行顺序完全无关:
import pandas as pd name_dict = { 'Name': ['a','b','c','d'], 'Score': [90,80,95,20] } df = pd.DataFrame(name_dict) # 提取名称为a的对应分数 target_name = 'a' a_score = df.loc[df['Name'] == target_name, 'Score'].iloc[0] print(a_score) # 固定返回90,行顺序变动不会影响结果
方案2:一次性生成名称-分数映射字典(高频查询推荐)
如果需要多次查询不同名称的分数,直接将两列拼接为键值对字典,后续直接按键取值即可,查询效率更高,完全不依赖DataFrame的原有结构:
# 生成 {名称: 对应分数} 的映射字典 score_map = dict(zip(df['Name'], df['Score'])) # 直接按键取值 print(score_map['a']) # 返回90 print(score_map['c']) # 返回95
特殊场景处理:如果
Name列存在重复值,上述字典写法会默认保留最后一次出现的重复名称对应的分数。如果需要收集同名对象的所有分数,可以用分组聚合逻辑生成映射:# 每个名称对应的分数以列表形式存储 score_map_dup = df.groupby('Name')['Score'].agg(list).to_dict()
内容的提问来源于stack exchange,提问作者AK007
相关产品推荐
相关产品推荐

