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

使用pandas json_normalize处理JSON文件触发KeyError,内嵌JSON正常

问题分析与解决方案

核心问题原因

你遇到的KeyError本质是**pd.json_normalize的输入类型错误**:

  • 内嵌JSON时你传的是原生Python字典/列表(符合json_normalize的要求),所以能正常解析嵌套字段;
  • 读取JSON文件后,要么把pd.read_json返回的DataFrame直接传给json_normalize(DataFrame不是原生JSON对象),要么直接给json_normalize传文件名(它不支持直接读文件),导致解析结构完全错误,自然找不到author.name这类嵌套列。

正确解决方案

方案1:先加载JSON文件为原生对象,再标准化(最直接)

先使用json模块把文件内容加载成Python列表/字典,再传给pd.json_normalize,这样就能正确解析嵌套字段:

import pandas as pd
import json

# 加载JSON文件为原生Python对象
with open("file.json", "r", encoding="utf-8") as f:
    raw_json_data = json.load(f)

# 标准化嵌套JSON,生成带`author.name`的DataFrame
normalized_df = pd.json_normalize(raw_json_data)

# 导出指定列到CSV
normalized_df[["timestamp", "author.name", "message"]].to_csv("output.csv", index=False)

方案2:基于已读取的DataFrame展开嵌套列

如果已经用pd.read_json读取了文件,不想重新加载,可以通过拆分author列来生成嵌套字段:

import pandas as pd

# 先读取JSON文件得到原始DataFrame
raw_df = pd.read_json("file.json")

# 展开`author`列并添加前缀,再和原表合并
expanded_author = pd.json_normalize(raw_df["author"]).add_prefix("author.")
normalized_df = raw_df.join(expanded_author)

# 导出目标列
normalized_df[["timestamp", "author.name", "message"]].to_csv("output.csv", index=False)

为什么之前的操作会报错

  1. pd.json_normalize(df)报错:df是pd.read_json返回的DataFrame,json_normalize会把DataFrame的列(timestamp/author/message)当成顶级JSON键,根本不会解析author列里的嵌套结构,所以找不到author.name。
  2. 直接用pd.json_normalize读文件报错:pd.json_normalize的第一个参数是原生JSON对象(字典/列表),不是文件名。你传文件名相当于让它解析字符串"file.json",解析后得到的是空结构,自然导出空行、找不到指定列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:37:17