使用嵌套对象读取嵌套 JSON 作为 Pandas DataFrame
处理包含嵌套对象的 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