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, les manipuler efficacement en Python est crucial . Pandas fournit un outil puissant pour y parvenir - json_normalize.
Agrandissement du tableau en colonnes
Pour étendre le tableau d'emplacements en colonnes distinctes, utilisez json_normalize comme suit :
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)
Cela créera une trame de données 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 :
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)
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 :
df = pd.read_json('myJson.json', orient='records', convert_dates=['date'])
print(df)
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
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3