J'essaie de créer un fichier json de cadre de données pandas. J'ai vu plusieurs solutions à ce problème qui utilisent des fonctions intégrées from_dict/json_normalize mais je ne peux pas l'appliquer à mon code. Voici comment mes données sont structurées dans un fichier json :
"data": [
{
"groups": {
"data": [
{
"group": "Math",
"year_joined": "2009"
},
{
"group_name": "History",
"year_joined": "2011"
},
{
"group_name": "Biology",
"year_joined": "2010"
}
]
},
"id": "12512"
},
Lorsque j'essaie de normaliser ces données avec les pandas, procédez comme suit :
path = 'mypath'
f = open(path)
data = json.load(f)
test = pd.json_normalize(
data['data'],
errors='ignore')
Je viens de recevoir quelque chose comme ça :
id groups.data
0 12512 [{'group_name': 'Math', 'year_joined': '2009', 'gr...
1 23172 [{'group_name': 'Chemistry', 'year_joined': '2005'...
Je veux que ces données ressemblent à ceci (solution 1) :
id group year_joined
0 12512 group1 year1
1 12512 group2 year2
2 12512 group3 year3
Ou comme ceci (solution 2) :
id group year_joined
0 12512 group1,group2,group3 year1,year2,year3
1 23172 group4,group5 year4,year5
Comment puis-je y parvenir? J'ai essayé de passer le paramètre 'record_path' à la fonction 'json_normalize' mais cela ne change rien. J'ai essayé d'utiliser la fonction 'DataFrame.from_dict' pour contourner ce problème, mais j'ai échoué. La seule façon dont j'ai pu accéder à la solution 1 était de créer simplement plusieurs boucles qui parcouraient tout dans le fichier json et de l'ajouter à une liste séparée. Cela fonctionne un peu mais prend beaucoup de temps sur des ensembles de données plus volumineux.
Comment puis-je utiliser les outils pandas intégrés pour traiter les fichiers qui sont imbriqués en tant que dictionnaires dans la 3ème couche du fichier, comme présenté ci-dessus ?
Merci d'avance pour toutes réponses
Vous devez collecter les informations du data
dictionnaire
solution 1
d = {}
for group in data["data"]:
groups = [x["group_name"] for x in group['groups']["data"]]
d['id'] = d.get('id', []) + [group['id']] * len(groups)
d['group'] = d.get('group', []) + groups
d['year_joined'] = d.get('year_joined', []) + [x["year_joined"] for x in group['groups']["data"]]
df = pd.DataFrame(d)
Sortir
id group year_joined
0 12512 Math 2009
1 12512 History 2011
2 12512 Biology 2010
3 23172 Chemistry 2007
4 23172 Economics 2008
solution 2
d = {}
for group in data["data"]:
d['id'] = d.get('id', []) + [group['id']]
d['group'] = d.get('group', []) + [','.join(x["group_name"] for x in group['groups']["data"])]
d['year_joined'] = d.get('year_joined', []) + [','.join(x["year_joined"] for x in group['groups']["data"])]
df = pd.DataFrame(d)
Sortir
id group year_joined
0 12512 Math,History,Biology 2009,2011,2010
1 23172 Chemistry,Economics 2007,2008
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots