pd.read_json读取JSON文件无法生成列标题正确的DataFrame
解决CSV转JSON后Pandas读取列标题异常的问题
我来帮你分析下问题所在,以及给出两种可行的解决方案:
问题根源
你生成的JSON结构是一个外层对象,里面包含一个Inspections数组,数组的每个元素是单条记录的字典。当Pandas用pd.read_json()读取这种结构时,会把Inspections当作唯一的列名,而每行的字典就成了该列的单元格内容,这就是你看到的结果。
解决方案1:修改CSV转JSON的代码(推荐)
直接生成数组格式的JSON(而非嵌套在外层对象里),这样Pandas读取时会自动识别字典的键为列标题,值为对应行的数据。修改后的代码如下:
# Import required files import csv import json import pandas as pd from pandas import DataFrame # Open file InspectionsFile = "your_input.csv" # 记得替换成你的实际CSV路径 with open(InspectionsFile, "r") as f: reader = csv.reader(f) next(reader) # 跳过表头 # 直接生成字典列表,而非嵌套在Inspections键下 data = [] for row in reader: data.append({ "ACTIVITY DATE": row[0], "OWNER ID": row[1], "OWNER NAME": row[2], "FACILITY ID": row[3] }) # Open a new File and dump JSON format JsonFile = input('Enter a filename to save in Json format: ') with open(JsonFile, "w") as f: json.dump(data, f, indent=4) print("A new file has been created with json format for the database") # 现在读取JSON就能得到预期的DataFrame了 df = pd.read_json(JsonFile) print(df.head())
解决方案2:针对已生成的JSON文件做读取处理
如果已经有了现有结构的JSON文件,不想重新生成,可以在读取后把Inspections列的字典数据展开成标准DataFrame:
import pandas as pd JsonFile = "your_existing_json.json" # 替换成你的JSON路径 # 先读取原始JSON raw_df = pd.read_json(JsonFile) # 把Inspections列的字典列表转换成DataFrame df = pd.DataFrame(raw_df["Inspections"].tolist()) print(df.head())
两种方案都能让你得到列标题正常显示的DataFrame,第一种从源头解决问题,更符合Pandas的读取习惯;第二种适合处理已有的JSON文件。
内容的提问来源于stack exchange,提问作者ZaweeeZ
相关产品推荐
相关产品推荐

