Leer JSON anidado con objetos anidados como un marco de datos de Pandas
Cuando se trata de datos JSON que contienen objetos anidados, manipularlos de manera eficiente en Python es crucial . Pandas proporciona una poderosa herramienta para lograr esto: json_normalize.
Expandiendo la matriz en columnas
Para expandir la matriz de ubicaciones en columnas separadas, use json_normalize de la siguiente manera:
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)
Esto creará un marco de datos con columnas expandidas:
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
Manejo de múltiples objetos JSON
Para archivos JSON que contienen múltiples objetos, el enfoque depende de la estructura de datos deseada.
Mantener columnas individuales
Para mantener columnas individuales (fecha, número, nombre, ubicaciones), utilice lo siguiente:
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)
Esto agrupará los datos y concatenará las ubicaciones:
date name number locations 0 2016-01-10 R 3932 Spital am Pyhrn Bahnhof,Windischgarsten Bahnho...
Aplanar la estructura de datos
Si prefiere una estructura de datos aplanada, puede use json_normalize con la siguiente configuración:
df = pd.read_json('myJson.json', orient='records', convert_dates=['date'])
print(df)
Esto generará los datos en una sola tabla:
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
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3