入れ子になったオブジェクトを含む入れ子になった JSON を Pandas DataFrame として読み取る
入れ子になったオブジェクトを含む JSON データを扱う場合、Python で効率的に操作することが重要です。 Pandas はこれを実現するための強力なツールを提供しています - json_normalize.
配列を列に展開
location 配列を個別の列に展開するには、次のように 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)
これにより、拡張された列を持つデータフレームが作成されます: location_arrTime places_arrTimeDiffMin places_depTime \
0 06:32
1 06:37 1 06:40
2 08:24 1
ロケーション_depTimeDiffMin ロケーション_名 ロケーション_プラットフォーム \
0 0 シュピタル・アム・ピュルン駅 2
1 0 ヴィンディッシュガルステン駅 2
2 リンツ/ドナウ中央駅 1A-B
location_stationIdx location_track 番号 名前 日付
0 0 R 3932 R 3932 01.10.2016
1 1 R 3932 2016 年 10 月 1 日
2 22 R 3932 01.10.2016 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)
これはデータをグループ化し、場所を連結します: 日付名番号場所
0 2016-01-10 R 3932 Spital am Pyhrn Bahnhof,Windischgarsten Bahnho...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_normalize を使用します:df = pd.read_json('myJson.json', orient='records', convert_dates=['date'])
print(df)
これは単一のテーブルにデータを出力します: 数値 日付 名前 ... location.arrTimeDiffMin places.depTimeDiffMin places.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