如何使用Python Pandas将DataFrame转换为指定嵌套格式的JSON文件并正确获取列数据
解决Pandas DataFrame转嵌套JSON的问题
我明白你现在的困扰——想要把包含品牌、车型和价格的DataFrame转成指定的嵌套JSON结构,但目前只能提取到价格列。其实你的分组聚合步骤已经做对了,只差最后一步把多级索引的结果转换成嵌套字典!
问题分析
你当前的代码执行后得到的是一个多级索引(MultiIndex)的Series,它的结构是(name, carmodel)作为索引,对应price值。直接导出的话没法自动变成你要的嵌套JSON,需要先把这个结构转换成嵌套字典。
完整解决方案代码
import pandas as pd import json # 读取CSV并处理价格数据类型 df = pd.read_csv(r'D:\vucar\scraper\result.csv', dtype='unicode') df['price'] = pd.to_numeric(df['price'], downcast='float') # 分组聚合(你的这部分代码没问题) cars = df[['name','carmodel','price']].sort_values('name').groupby(['name','carmodel']).mean()['price'] # 核心操作:将多级索引Series转为嵌套字典 nested_car_dict = cars.unstack().to_dict('index') # 可选:如果存在缺失值(比如某个品牌下部分车型没有数据),可以填充0或删除 # nested_car_dict = cars.unstack().fillna(0).to_dict('index') # 输出查看结构是否符合预期 print(nested_car_dict) # 写入JSON文件 with open('car_prices.json', 'w', encoding='utf-8') as f: json.dump(nested_car_dict, f, indent=4, ensure_ascii=False)
关键步骤解释
unstack():把MultiIndex的第二层(carmodel)从索引转为列,这样每个品牌(name)对应一行,列名是车型,值是价格。to_dict('index'):将处理后的DataFrame转换为嵌套字典,外层键是品牌名,内层字典的键是车型,值是对应的平均价格,完美匹配你想要的JSON结构。
这样运行后,生成的JSON文件就会和你期望的嵌套结构完全一致啦!
内容的提问来源于stack exchange,提问作者pepongcute266
相关产品推荐
相关产品推荐

