Чтение вложенного JSON с вложенными объектами в виде фрейма данных Pandas
При работе с данными JSON, содержащими вложенные объекты, эффективное манипулирование ими в Python имеет решающее значение . Pandas предоставляет мощный инструмент для достижения этой цели — json_normalize.
Развертывание массива по столбцам
Чтобы разложить массив местоположений на отдельные столбцы, используйте json_normalize следующим образом:
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)
Это создаст фрейм данных с расширенными столбцами:
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
Обработка нескольких объектов JSON
Для файлов JSON, содержащих несколько объектов, подход зависит от желаемой структуры данных.
Сохранить отдельные столбцы
Чтобы сохранить отдельные столбцы (дата, номер, имя, местоположение) используйте следующее:
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)
Это сгруппирует данные и объединит местоположения:
date name number locations 0 2016-01-10 R 3932 Spital am Pyhrn Bahnhof,Windischgarsten Bahnho...
Сглаживание структуры данных
Если вы предпочитаете плоскую структуру данных, вы можете используйте json_normalize со следующими настройками:
df = pd.read_json('myJson.json', orient='records', convert_dates=['date'])
print(df)
Это выведет данные в одну таблицу:
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
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3