Python新手求教:将嵌套JSON转换为指定格式的DataFrame
将嵌套JSON转换为DataFrame(无循环/手动指定列名)
原始数据
data = { "results": [ {"values": [{"name": "firstname","value": "Fname1"},{"name": "lastname","value": "Lname1"}]}, {"values": [{"name": "firstname","value": "Fname2"},{"name": "lastname","value": "Lname2"}]}, {"values": [{"name": "firstname","value": "Fname3"},{"name": "lastname","value": "Lname3"}]} ] }
期望输出
| firstname | lastname |
|---|---|
| Fname1 | Lname1 |
| Fname2 | Lname2 |
| Fname3 | Lname3 |
你的尝试代码及结果
df = pd.DataFrame(data["results"]) df[['values'][0]].apply(lambda x: x[0]['value'])
得到的结果:
| Fname1 |
| Fname2 |
| Fname3 |
解决方案
可以用pd.json_normalize结合pivot实现,无需循环或手动指定列名:
import pandas as pd # 一步到位转换 df = pd.json_normalize(data['results'], record_path='values').pivot(columns='name', values='value').reset_index(drop=True)
步骤说明
pd.json_normalize(data['results'], record_path='values'):将嵌套在results里的values数组展开,生成每行对应一个name-value对的DataFrame:name value firstname Fname1 lastname Lname1 firstname Fname2 lastname Lname2 firstname Fname3 lastname Lname3 pivot(columns='name', values='value'):将name列的取值转为DataFrame的列名,value列的内容填充到对应单元格。reset_index(drop=True):重置索引,去除多余的索引列。
执行后就能得到你期望的DataFrame结构。
内容的提问来源于stack exchange,提问作者Mitchie
相关产品推荐
相关产品推荐

