python - 规范化熊猫中深度嵌套的 json
问题描述
我正在尝试规范化一个看起来像这样的 json 文件(一个小片段):
[{'trimestre': 'A2000',
'cours': [{"sigle":"TECH 20701", "titre":"La cybersécurité et le gestionnaire",'etudiants': [{'matricule': '22000803',
'nom': 'Boyer,André',
'note': 'C+',
'valeur': 2.3},
{'matricule': '22000829',
'nom': 'Keighan,Maylis',
'note': 'A+',
'valeur': 4.3},
{'matricule': '22000869',
'nom': 'Lahaie,Lyes',
'note': 'B+',
'valeur': 3.3},
{'matricule': '22000973',
'nom': 'Conerardy,Rawaa',
'note': 'B+',
'valeur': 3.3},
]}]
我试图得到一个看起来像这样的表:
**"trimestre"** (columns)
**"sigle" + "titre"** (index): *valeur*
import pandas as pd
import json
import numpy as np
from pandas.io.json import json_normalize
data = pd.read_json('DataTP2.json')
print(data)
我尝试使用这样的规范化功能
result = json_normalize(data, 'cours',['trimestre'])
print(result)
但我收到一个错误:TypeError: string indices must be integers
基本上我想要“sigle”+“titre”(来自“cours”)作为索引,“trimestre”作为列,“valeur”的平均值作为表中的值。
提前致谢!
解决方案
给你 :
from collections import defaultdict
import json
with open("data.json", "r") as f:
data = json.load(f)
test = [{'trimestre': 'A2000',
'cours': [{"sigle":"TECH 20701", "titre":"La cybersécurité et le gestionnaire",'etudiants': [{'matricule': '22000803',
'nom': 'Boyer,André',
'note': 'C+',
'valeur': 2.3},
{'matricule': '22000829',
'nom': 'Keighan,Maylis',
'note': 'A+',
'valeur': 4.3},
{'matricule': '22000869',
'nom': 'Lahaie,Lyes',
'note': 'B+',
'valeur': 3.3},
{'matricule': '22000973',
'nom': 'Conerardy,Rawaa',
'note': 'B+',
'valeur': 3.3},
]}]}]
results = defaultdict(list)
for trimestre in data:
results["trimestre"].append(trimestre["trimestre"])
for cours in trimestre["cours"]:
results["index"].append(f"{cours['sigle']} {cours['titre']}")
results["valeur"].append(cours["sigle"])
df = pd.DataFrame(results["valeur"], columns=results["trimestre"], index=results["index"])
结果
>>> print(df)
A2000
TECH 20701 La cybersécurité et le gestionnaire TECH 20701
推荐阅读
- r - 如何在 R drake 中组合和过滤动态文件目标?
- python - 后处理和读取模糊数字 - OpenCV / tesseract
- python - Python调用日期时间当前时间?
- python - 如何提前退出 Google Cloud 功能
- java - 在调用“VIBRATOR_SERVICE”之前检查设备的振动能力
- java - JsonGenerator 可以在同一个调用中写入 OutputStream 和 Writer 吗?
- docker - 来自 python:3.6-slim 添加 jdk8 的 Dockerfile
- python - 在视图中使用异步并与 Django3.1 中的 index.html 文件连接
- automapper - Automapper 通过实体框架中的关系
- spring-webflux - Webflux WebClient 重试和Spring Cloud Circuit Breaker Resilience4J 重试模式走进一家吧