使用巢狀物件讀取巢狀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中文網其他相關文章!