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

基于Pandas DataFrame更新字典数组的Item值问题

问题分析与解决方案

你的代码逻辑存在两个核心问题:

  1. for k in df1 遍历的是DataFrame的列名(即"ID"和"Item"),而非行数据,导致你把字典的Item值更新成了列名,完全没用到df1里的实际商品数据。
  2. 没有通过ID建立匹配关系,只是盲目遍历所有字典条目更新,最终所有条目的Item都会被覆盖成最后一个列名。

正确实现步骤

要实现"根据ID匹配,用df1的Item值更新jsn对应条目"的需求,我们可以先把df1转换成ID到Item的映射字典(提高匹配效率),再遍历jsn数组完成更新,同时注意处理ID格式不统一、键名大小写不一致的问题。

完整代码示例

import pandas as pd

jsn = [{'ID' : '01', 'Item' : 'Apple', 'salesman' :'Johnny'},
       {'ID': '02', 'Item': 'carrot', 'salesman':'Patricia'}, 
       {'ID': '04', 'Item' : 'airplane', 'salesman' : 'Eddgard'}, 
       {'ID' : '05', 'item' : 'iron', 'salesman' : 'Bettany'}]

df1 = pd.DataFrame([["1", "apple"], ["2", "mango"], 
                    ["3", "melon"], ["4", "watermelon"], 
                    ["5", "strawberry"]],columns=["ID", "Item"])

# 1. 统一ID格式:把df1的ID转为带前导0的两位字符串,和jsn的ID格式对齐
df1['ID'] = df1['ID'].str.zfill(2)
# 2. 生成ID到Item的映射字典,方便快速查询
item_mapping = df1.set_index('ID')['Item'].to_dict()

# 3. 遍历jsn数组,按ID匹配更新Item值
for entry in jsn:
    entry_id = entry['ID']
    if entry_id in item_mapping:
        # 处理jsn中存在小写`item`键的情况,统一为大写`Item`
        if 'item' in entry:
            del entry['item']
        entry['Item'] = item_mapping[entry_id]

代码说明

  • 统一ID格式:jsn的ID是"01"这类带前导0的字符串,df1的ID是"1"这类纯数字字符串,通过str.zfill(2)把df1的ID补成两位带前导0的格式,确保匹配准确。
  • 映射字典:set_index('ID')['Item'].to_dict()会生成类似{"01": "apple", "02": "mango"}的字典,后续查询效率远高于循环DataFrame。
  • 处理键名大小写:jsn最后一个条目的键是小写item,删除后统一用大写Item键,保证数据结构一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:47:49