Python?Pandas實現(xiàn)將嵌套JSON數(shù)據(jù)轉(zhuǎn)換DataFrame
對于復雜的JSON數(shù)據(jù)進行分析時,通常的做法是將JSON數(shù)據(jù)結(jié)構轉(zhuǎn)換為Pandas DataFrame,因為它可以幫助更方便地操作和可視化數(shù)據(jù)。在本文中,讓我們考慮不同的嵌套JSON數(shù)據(jù)結(jié)構,并使用內(nèi)置和自定義函數(shù)將它們扁平化。
Pandas有一個很好的內(nèi)置函數(shù)json_normalize(),可以將簡單到中等半結(jié)構化的嵌套JSON結(jié)構扁平化為數(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應用程序中傳輸數(shù)據(jù)的首選數(shù)據(jù)類型。首選JSON的原因是,由于文件大小很小,它非常輕量級,可以在HTTP請求和響應中來回發(fā)送。
下面是我們可以在Python中扁平化嵌套json的示例:
示例1:Pandas json_normalize函數(shù)
考慮一個嵌套字典列表,其中包含有關學生及其分數(shù)的詳細信息。在這個JSON數(shù)據(jù)結(jié)構上使用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選項將一個稍微復雜的JSON結(jié)構扁平化為一個扁平表。在這個例子中,我們考慮了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é)構,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é)構,通過將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)容,更多關于Pandas實現(xiàn)JSON數(shù)據(jù)轉(zhuǎn)DataFrame的資料請關注腳本之家其它相關文章!
- Python基于pandas實現(xiàn)json格式轉(zhuǎn)換成dataframe的方法
- 對pandas處理json數(shù)據(jù)的方法詳解
- Pandas讀存JSON數(shù)據(jù)操作示例詳解
- 讀Json文件生成pandas數(shù)據(jù)框詳情
- python使用pandas讀取json文件并進行刷選導出xlsx文件的方法示例
- Pandas實現(xiàn)解析JSON數(shù)據(jù)與導出的示例詳解
- pandas讀取HTML和JSON數(shù)據(jù)的實現(xiàn)示例
- Python使用pandas讀取Excel并選取列轉(zhuǎn)json
- Pandas JSON的處理使用
相關文章
python網(wǎng)絡編程:socketserver的基本使用方法實例分析
這篇文章主要介紹了python網(wǎng)絡編程:socketserver的基本使用方法,結(jié)合實例形式分析了python網(wǎng)絡編程中socketserver的基本功能、使用方法及操作注意事項,需要的朋友可以參考下2020-04-04
anaconda jupyter不能導入安裝的lightgbm解決方案
這篇文章主要介紹了anaconda jupyter不能導入安裝的lightgbm解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03

