Lendo JSON aninhado com objetos aninhados como um DataFrame do Pandas
Ao lidar com dados JSON contendo objetos aninhados, manipulá-los de forma eficiente em Python é crucial . Pandas fornece uma ferramenta poderosa para conseguir isso - json_normalize.
Expandindo a matriz em colunas
Para expandir a matriz de locais em colunas separadas, use json_normalize da seguinte maneira:
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)
Isso criará um dataframe com colunas 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
Tratamento de vários objetos JSON
Para arquivos JSON contendo vários objetos, a abordagem depende da estrutura de dados desejada.
Manter colunas individuais
Para manter colunas individuais (data, número, nome, locais), use o seguinte:
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)
Isso agrupará os dados e concatenará os locais:
date name number locations 0 2016-01-10 R 3932 Spital am Pyhrn Bahnhof,Windischgarsten Bahnho...
Achatar a estrutura de dados
Se preferir uma estrutura de dados nivelada, você pode use json_normalize com as seguintes configurações:
df = pd.read_json('myJson.json', orient='records', convert_dates=['date'])
print(df)
Isso gerará os dados em uma única tabela:
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
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3