Python?Pandas實現(xiàn)將嵌套JSON數(shù)據(jù)轉(zhuǎn)換DataFrame
對于復(fù)雜的JSON數(shù)據(jù)進行分析時,通常的做法是將JSON數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為Pandas DataFrame,因為它可以幫助更方便地操作和可視化數(shù)據(jù)。在本文中,讓我們考慮不同的嵌套JSON數(shù)據(jù)結(jié)構(gòu),并使用內(nèi)置和自定義函數(shù)將它們扁平化。
Pandas有一個很好的內(nèi)置函數(shù)json_normalize(),可以將簡單到中等半結(jié)構(gòu)化的嵌套JSON結(jié)構(gòu)扁平化為數(shù)據(jù)表。
語法: pandas.json_normalize(data, errors=’raise’, sep=’.’, max_level=None)
參數(shù):
- data - 字典或字典列表
- errors - {‘raise’, ‘ignore’},,默認值”raise“
- sep - str,默認值“.”嵌套記錄將生成由指定分隔符分隔的名稱。
- max_level - int,默認為None。要規(guī)格化的最大級別數(shù)(字典深度)。
JSON - > Pandas DataFrame示例
大多數(shù)通過從Web提取的數(shù)據(jù)都是JSON數(shù)據(jù)類型的形式,因為JSON是在Web應(yīng)用程序中傳輸數(shù)據(jù)的首選數(shù)據(jù)類型。首選JSON的原因是,由于文件大小很小,它非常輕量級,可以在HTTP請求和響應(yīng)中來回發(fā)送。
下面是我們可以在Python中扁平化嵌套json的示例:
示例1:Pandas json_normalize函數(shù)
考慮一個嵌套字典列表,其中包含有關(guān)學(xué)生及其分數(shù)的詳細信息。在這個JSON數(shù)據(jù)結(jié)構(gòu)上使用pandas json_normalize,將其扁平化為一個扁平表,如圖所示
import pandas as pd data = [ {"Roll no": 1, "student": {"first_name": "Ram", "last_name": "kumar"} }, {"student": {"English": "95", "Math": "88"} }, {"Roll no": 2, "student": {"first_name": "Joseph", "English": "90", "Science": "82"} }, {"Roll no": 3, "student": {"first_name": "abinaya", "last_name": "devi"}, "student": {"English": "91", "Math": "98"} }, ] df = pd.json_normalize(data) print(df)
輸出
Roll no student.first_name student.last_name student.English student.Math student.Science
0 1 Ram kumar NaN NaN NaN
1 NaN NaN NaN 95 88 NaN
2 2 Joseph NaN 90 NaN 82
3 3 abinaya devi 91 98 NaN
示例2:使用max_level=0在Pandas中展平嵌套的JSON
現(xiàn)在讓我們使用max_level選項將一個稍微復(fù)雜的JSON結(jié)構(gòu)扁平化為一個扁平表。在這個例子中,我們考慮了max_level為0,這意味著只扁平化JSON的第一層,并且可以對結(jié)果進行實驗。
在這里,我們考慮了一個JSON格式的不同個人健康記錄的示例。
import pandas as pd ???????data = [ { "id": 1, "candidate": "Roberto mathews", "health_index": {"bmi": 22, "blood_pressure": 130}, }, {"candidate": "Shane wade", "health_index": {"bmi": 28, "blood_pressure": 160}}, { "id": 2, "candidate": "Bruce tommy", "health_index": {"bmi": 31, "blood_pressure": 190}, }, ] pd.json_normalize(data, max_level=0)
輸出
由于我們只使用了一個層次的扁平化,第二個層次被保留為鍵值對
id candidate health_index
0 1.0 Roberto mathews {'bmi': 22, 'blood_pressure': 130}
1 NaN Shane wade {'bmi': 28, 'blood_pressure': 160}
2 2.0 Bruce tommy {'bmi': 31, 'blood_pressure': 190}
示例3:使用max_level=1在Pandas中展平嵌套的JSON
現(xiàn)在讓我們使用與上面相同的JSON數(shù)據(jù)結(jié)構(gòu),max_level為1,這意味著將JSON的前兩個級別扁平化,并可以對結(jié)果進行實驗。
import pandas as pd data = [ { "id": 1, "candidate": "Roberto mathews", "health_index": {"bmi": 22, "blood_pressure": 130}, }, {"candidate": "Shane wade", "health_index": {"bmi": 28, "blood_pressure": 160}}, { "id": 2, "candidate": "Bruce tommy", "health_index": {"bmi": 31, "blood_pressure": 190}, }, ] pd.json_normalize(data, max_level=1)
輸出
id candidate health_index.bmi health_index.blood_pressure
0 1.0 Roberto mathews 22 130
1 NaN Shane wade 28 160
2 2.0 Bruce tommy 31 190
示例4:將Meta參數(shù)傳遞給json_normalize
最后,讓我們考慮一個深度嵌套的JSON結(jié)構(gòu),通過將Meta參數(shù)傳遞給json_normalize函數(shù),可以將其轉(zhuǎn)換為數(shù)據(jù)表,如下所示。
這里,在下面的代碼中,我們已經(jīng)將JSON必須解析到數(shù)據(jù)表的時間順序傳遞給了它。在下面的代碼中,我們首先建議解析部門鍵,然后是公司和標語,然后,我們將management和CEO鍵作為嵌套列表傳遞,表明它們必須作為單個字段解析。
import pandas as pd data = [ { "company": "Google", "tagline": "Dont be evil", "management": {"CEO": "Sundar Pichai"}, "department": [ {"name": "Gmail", "revenue (bn)": 123}, {"name": "GCP", "revenue (bn)": 400}, {"name": "Google drive", "revenue (bn)": 600}, ], }, { "company": "Microsoft", "tagline": "Be What's Next", "management": {"CEO": "Satya Nadella"}, "department": [ {"name": "Onedrive", "revenue (bn)": 13}, {"name": "Azure", "revenue (bn)": 300}, {"name": "Microsoft 365", "revenue (bn)": 300}, ], }, ???????] result = pd.json_normalize( data, "department", ["company", "tagline", ["management", "CEO"]] ) result
輸出
name revenue (bn) company tagline management.CEO
0 Gmail 123 Google Dont be evil Sundar Pichai
1 GCP 400 Google Dont be evil Sundar Pichai
2 Google drive 600 Google Dont be evil Sundar Pichai
3 Onedrive 13 Microsoft Be What's Next Satya Nadella
4 Azure 300 Microsoft Be What's Next Satya Nadella
5 Microsoft 365 300 Microsoft Be What's Next Satya Nadella
以上就是Python Pandas實現(xiàn)將嵌套JSON數(shù)據(jù)轉(zhuǎn)換DataFrame的詳細內(nèi)容,更多關(guān)于Pandas實現(xiàn)JSON數(shù)據(jù)轉(zhuǎn)DataFrame的資料請關(guān)注腳本之家其它相關(guān)文章!
- Python基于pandas實現(xiàn)json格式轉(zhuǎn)換成dataframe的方法
- 對pandas處理json數(shù)據(jù)的方法詳解
- Pandas讀存JSON數(shù)據(jù)操作示例詳解
- 讀Json文件生成pandas數(shù)據(jù)框詳情
- python使用pandas讀取json文件并進行刷選導(dǎo)出xlsx文件的方法示例
- Pandas實現(xiàn)解析JSON數(shù)據(jù)與導(dǎo)出的示例詳解
- pandas讀取HTML和JSON數(shù)據(jù)的實現(xiàn)示例
- Python使用pandas讀取Excel并選取列轉(zhuǎn)json
- Pandas JSON的處理使用
相關(guān)文章
python網(wǎng)絡(luò)編程:socketserver的基本使用方法實例分析
這篇文章主要介紹了python網(wǎng)絡(luò)編程:socketserver的基本使用方法,結(jié)合實例形式分析了python網(wǎng)絡(luò)編程中socketserver的基本功能、使用方法及操作注意事項,需要的朋友可以參考下2020-04-04anaconda jupyter不能導(dǎo)入安裝的lightgbm解決方案
這篇文章主要介紹了anaconda jupyter不能導(dǎo)入安裝的lightgbm解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03