Python读取JSON文件转DataFrame及DataFrame构造调用报错解决
本地JSON文件转Pandas DataFrame报错修复方案
你遇到的ValueError("DataFrame constructor not properly called!")报错,中文含义为ValueError("DataFrame 构造方法调用方式错误"),核心原因是json.load()读取JSON后返回的数据结构,不符合pandas.DataFrame的入参要求,常见的不兼容场景及对应修复方法如下:
常见触发原因
- JSON顶层是单个字典(不是字典构成的列表),且字典的value不是等长的可迭代对象
- JSON顶层是嵌套层级过深的非结构化数据,无法直接展开为二维表格
- 读取到的JSON内容为空,或者存在格式错误导致
json.load()返回了非预期的对象类型(比如None、纯字符串等)
对应修复方案
情况1:JSON顶层为单条记录的字典(如{"name":"a","age":18})
需要把字典套进列表里再传入DataFrame,修改代码如下:
import json import pandas as pd def open_file(filename): with open(filename, "r") as file: file_data = json.load(file) # 单条字典套列表后再传入构造函数 output_df = pd.DataFrame([file_data]) return output_df df = open_file("LT.json")
情况2:JSON为嵌套结构,数据存在于子字段中
如果你的JSON存在多层嵌套,比如结构为{"code":200,"data":[{"name":"a"},{"name":"b"}]},需要先提取存储结构化列表的字段:
import json import pandas as pd def open_file(filename): with open(filename, "r") as file: file_data = json.load(file) # 提取实际存储列表的字段,示例字段名为data,可根据你的JSON实际结构调整 data_list = file_data.get("data", []) output_df = pd.DataFrame(data_list) return output_df df = open_file("LT.json")
情况3:直接使用Pandas内置的read_json方法
大部分标准结构的JSON可以直接用pandas内置方法读取,省去手动读文件解析的步骤:
import pandas as pd df = pd.read_json("LT.json")
如果修改后仍然报错,可以在file_list = json.load(file)之后加一行print(type(file_list), file_list),打印解析后的数据类型和内容,明确数据结构后再对应调整入参即可。
内容的提问来源于stack exchange,提问作者Domi
相关产品推荐
相关产品推荐

