「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Pandas でネストされた JSON オブジェクトを DataFrame として管理するにはどうすればよいですか?

Pandas でネストされた JSON オブジェクトを DataFrame として管理するにはどうすればよいですか?

2024 年 11 月 8 日に公開
ブラウズ:641

How to Manage Nested JSON Objects as a DataFrame in Pandas?

入れ子になったオブジェクトを含む入れ子になった 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
            
リリースステートメント この記事は次の場所に転載されています: 1729739643 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3