首頁  >  文章  >  後端開發  >  如何在 Pandas 中將巢狀 JSON 物件作為 DataFrame 進行管理?

如何在 Pandas 中將巢狀 JSON 物件作為 DataFrame 進行管理?

DDD
DDD原創
2024-10-24 14:07:02874瀏覽

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

使用巢狀物件讀取巢狀JSON 作為Pandas DataFrame

處理包含巢狀物件的JSON 資料時,在Python 中高效地操作它至關重要。 Pandas 提供了一個強大的工具來實現此目的 - json_normalize。

將數組擴展為列

要將位置數組擴展為單獨的列,請使用json_normalize,如下所示:

<code class="python">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)</code>

這將建立一個具有擴充列的資料框:

  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 文件,該方法取決於所需的資料結構。

保留單一欄位

要保留單一欄位(日期、數字、名稱、位置),請使用下列指令:

<code class="python">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)</code>

這將資料分組並連接位置:

        date    name number                                          locations
0  2016-01-10  R 3932         Spital am Pyhrn Bahnhof,Windischgarsten Bahnho...

扁平化資料結構

如果您喜歡扁平化資料結構,您可以使用json_normalize 並進行以下設定:

<code class="python">df = pd.read_json('myJson.json', orient='records', convert_dates=['date'])

print(df)</code>

這將在單一表中輸出資料:

  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

以上是如何在 Pandas 中將巢狀 JSON 物件作為 DataFrame 進行管理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn