Lecture de JSON imbriqué avec des objets imbriqués en tant que DataFrame Pandas
Lorsque vous traitez des données JSON contenant des objets imbriqués, il est crucial de les manipuler efficacement en Python . Pandas fournit un outil puissant pour y parvenir - json_normalize.
Agrandissement du tableau en colonnes
Pour étendre le tableau des emplacements en colonnes distinctes, utilisez json_normalize comme suit :
<code class="python">import json import pandas as pd with open('myJson.json') as data_file: data = json.load(data_file) df = pd.json_normalize(data, 'locations', ['date', 'number', 'name'], record_prefix='locations_') print(df)</code>
Cela créera un dataframe avec des colonnes développées :
locations_arrTime locations_arrTimeDiffMin locations_depTime \ 0 06:32 1 06:37 1 06:40 2 08:24 1 locations_depTimeDiffMin locations_name locations_platform \ 0 0 Spital am Pyhrn Bahnhof 2 1 0 Windischgarsten Bahnhof 2 2 Linz/Donau Hbf 1A-B locations_stationIdx locations_track number name date 0 0 R 3932 R 3932 01.10.2016 1 1 R 3932 01.10.2016 2 22 R 3932 01.10.2016
Gestion de plusieurs objets JSON
Pour les fichiers JSON contenant plusieurs objets, l'approche dépend de la structure de données souhaitée.
Conserver les colonnes individuelles
Pour conserver les colonnes individuelles (date, numéro, nom, emplacements), utilisez ce qui suit :
<code class="python">df = pd.read_json('myJson.json') df.locations = pd.DataFrame(df.locations.values.tolist())['name'] df = df.groupby(['date', 'name', 'number'])['locations'].apply(','.join).reset_index() print(df)</code>
Cela regroupera les données et concaténera les emplacements :
date name number locations 0 2016-01-10 R 3932 Spital am Pyhrn Bahnhof,Windischgarsten Bahnho...
Aplatir la structure des données
Si vous préférez une structure de données aplatie, vous pouvez utilisez json_normalize avec les paramètres suivants :
<code class="python">df = pd.read_json('myJson.json', orient='records', convert_dates=['date']) print(df)</code>
Cela affichera les données dans une seule table :
number date name ... locations.arrTimeDiffMin locations.depTimeDiffMin locations.platform 0 R 3932 2016-01-10 R 3932 ... 0 0 2 1 R 3932 2016-01-10 R 3932 ... 1 0 2 2 R 3932 2016-01-10 R 3932 ... 1 - 1A-B
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!