You need to enable JavaScript to run this app. Python pandas解析JSON提取嵌套结构DataFrame的PartNumber并解决KeyError
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas解析JSON提取嵌套结构DataFrame的PartNumber并解决KeyError

问题根因

当前代码执行报错的核心原因有两点:

  • 现有DataFrame的PartNumber列并非结构化嵌套字典,而是字典格式的纯文本字符串——当初解析原始JSON时未将嵌套的manufacturerPartNrs字段正常展平,导致这列存储的是被序列化为单引号字符串的字典内容,无法直接通过字典键访问
  • pandas列是逐行存储值的Series结构,直接对整列执行df['xxx']['yyy'][0]的字典索引逻辑,本质是对整个Series取键,而非逐行提取值,自然会抛出KeyError
落地实现方案

全程兼容空值、结构异常的场景,不会因为单条设备数据结构不符中断全流程:

  1. 先导入依赖库:
import ast
import pandas as pd

说明:用ast.literal_eval而非json.loads处理字符串转字典,因为当前列的字符串是Python单引号格式的字典,标准JSON解析器不兼容单引号写法

  1. 逐行把字符串形式的字典转成可操作的结构化对象:
# 兼容空值场景,避免空值引发解析报错
df["temp_pn"] = df["PartNumber"].apply(
    lambda x: ast.literal_eval(x) if pd.notna(x) else {}
)
  1. 逐层嵌套提取物料编号,同时做标准化清理(去掉首尾多余空格):
def get_cleaned_part_number(pn_struct):
    try:
        # 按原始JSON的层级路径取值:manufacturerPartNr列表 -> 第一个元素 -> partNumber字段
        raw_pn = pn_struct["manufacturerPartNr"][0]["partNumber"]
        # 规范化:去掉首尾多余的空格字符
        return raw_pn.strip()
    except (KeyError, IndexError, TypeError):
        # 遇到字段缺失、结构异常的行直接返回空值,不中断整体流程
        return None

df["normalizedPartNumber"] = df["temp_pn"].apply(get_cleaned_part_number)
# 删除临时中间列,保持DataFrame结构整洁
df = df.drop(columns=["temp_pn"])
执行效果

运行完成后,新增的normalizedPartNumber列会存储完全规范化的物料编号值:

  • 原本带尾随空格的'AIR-AP1231G-E-K9 '会被清理为'AIR-AP1231G-E-K9'
  • 结构异常、字段缺失的行不会触发程序报错,对应位置填充空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 18:45:03