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

含字符串对象的嵌套字典列表转pandas DataFrame及列拆分

问题描述

现有实时API接口地址linktoAPI,接口返回数据为嵌套字典列表。使用常规pandas字典列拆分方案处理时全部未达预期,核心原因是返回数据中键为history_value的字段值格式不统一,且实际存储为长字符串对象,而非原生字典类型。
尝试常规处理方案时触发的报错如下:

  • 调用字典get方法提取值时报错:'get' does not applicable for string
  • 做嵌套字典转DataFrame操作时报错:'str' object is not a mapping

当前使用的初始代码如下:

from urllib.request import urlopen
import pandas as pd
import json 

url = "LINKTOAPI"
response = urlopen(url)
data_json = json.loads(response.read())
baoluu = pd.DataFrame(data_json)
display(baoluu.head())

运行代码后可观察到history_value列存储的内容格式不统一,需求是将该列拆分为ngaybaoluu、ngayhoclai、lydo三个独立列。

解决方案

常规字典拆列方法仅支持列值为原生dict类型的场景,因此需要先对history_value列做容错解析,将字符串转换为结构化字典后再做字段提取,具体实现代码如下:

from urllib.request import urlopen
import pandas as pd
import json
import ast

def parse_history(content):
    # 处理空值、非字符串类型的异常条目
    if pd.isna(content) or not isinstance(content, str):
        return {"ngaybaoluu": None, "ngayhoclai": None, "lydo": None}
    # 优先按标准JSON解析,失败则按Python字面量格式解析,兼容单引号字典场景
    try:
        parsed_content = json.loads(content)
    except json.JSONDecodeError:
        try:
            parsed_content = ast.literal_eval(content)
        except (ValueError, SyntaxError):
            parsed_content = {}
    # 提取目标字段,键缺失时自动返回空值
    return {
        "ngaybaoluu": parsed_content.get("ngaybaoluu"),
        "ngayhoclai": parsed_content.get("ngayhoclai"),
        "lydo": parsed_content.get("lydo")
    }

url = "LINKTOAPI"
response = urlopen(url)
data_json = json.loads(response.read())
baoluu = pd.DataFrame(data_json)

# 解析字段并拆分
parsed_cols = baoluu["history_value"].apply(parse_history).apply(pd.Series)
# 合并回原表,不需要原history_value列可以在concat时drop掉该列
baoluu = pd.concat([baoluu, parsed_cols], axis=1)

# 校验结果
display(baoluu.head())

方案兼容场景说明:

  • 空值、缺失值条目不会触发报错
  • 同时支持标准JSON格式(双引号包裹)、Python字典格式(单引号包裹)的字符串解析
  • 完全无法解析的脏数据会自动填充空值,不会中断整体处理流程

内容的提问来源于stack exchange,提问作者Phạm Tấn Thành

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:01:29