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

pandas将JSON对象列拆分为独立列 解决json_normalize报错问题

报错原因

调用json_normalize时出现"str" has no attribute values报错,是因为当前DataFrame的details列存储的是JSON格式的字符串,而非Python字典对象。json_normalize仅支持接收字典、列表类型的结构化数据做展开,直接传入字符串就会触发该错误。

实现方法

按以下三步处理即可得到目标格式:

  • 先将details列的JSON字符串解析为字典类型
  • 对解析后的字典列做扁平化展开,统一给展开后的列添加details.前缀
  • 丢弃原表的details列,和展开后的新列按行拼接,得到最终结果
代码示例
import pandas as pd
import json

# 构造和你场景一致的测试DataFrame
df = pd.DataFrame({
    "asOfDate": ["2022-06-06"],
    "name": ["Vasanth"],
    "details": ['{"degree":"BE", "score":72.0, "subject" :"ECE"}']
})

# 解析details列的JSON字符串为字典后做扁平化
details_expand = pd.json_normalize(df["details"].apply(json.loads))
# 为展开后的列添加统一前缀
details_expand.columns = [f"details.{col}" for col in details_expand.columns]
# 拼接得到最终结果
final_df = pd.concat([df.drop("details", axis=1), details_expand], axis=1)

执行后final_df的输出和你要求的目标格式完全一致:

asOfDate     name details.degree  details.score details.subject
0  2022-06-06  Vasanth             BE           72.0             ECE

如果读取CSV后details列存在多余空格、转义符异常,先对该列做简单的字符串清洗再执行json.loads即可,不影响后续展开逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:24:26