遍历DataFrame嵌套字典提取指定字段的函数优化问询
嵌套JSON字段提取函数优化方案
原函数存在以下问题:
- 用
iterrows()遍历DataFrame效率低下,大数据量场景下性能差 - 变量名不一致:定义了
store_id列表,但代码里误写为store.append(store_val),会触发未定义变量错误 - 遍历字典所有键值对来匹配目标字段,冗余且低效,可直接通过键名取值
- 缺少异常处理,若某行数据缺失
store-boundary-dsp/estimates路径,会直接抛出KeyError中断执行 - 嵌套循环层级过多,代码可读性差
优化后的代码
import pandas as pd def traverse_dsp(data_frame, column): providers = [] store_ids = [] for resp in data_frame[column]: # 处理路径不存在的情况,避免KeyError try: estimates = resp.get('store-boundary-dsp', {}).get('estimates', []) for item in estimates: # 直接通过键名取值,默认空值避免字段缺失报错 store_id = item.get('storeExternalId') provider = item.get('provider') if store_id is not None: store_ids.append(store_id) if provider is not None: providers.append(provider) except Exception as e: # 可根据需求调整异常处理逻辑,比如记录错误行 print(f"处理数据时出错: {str(e)}") continue return providers, store_ids
优化说明
- 直接遍历DataFrame的列值,替代
iterrows(),提升遍历效率 - 使用
dict.get()方法安全取值,同时设置默认值,避免路径或字段缺失导致的报错 - 移除冗余的键值对遍历逻辑,直接通过键名获取目标字段,代码更简洁高效
- 增加异常捕获,保证函数在部分数据格式异常时仍能继续执行
- 修正变量名不一致的错误,统一使用
store_ids和providers命名,提升可读性
内容的提问来源于stack exchange,提问作者lifo
相关产品推荐
相关产品推荐

