簡體   English   中英

從嵌套 JSON 中提取數據 | 熊貓

[英]Extract data from nested JSON | Pandas

我正在處理一個嵌套的 JSON,以便使用 pandas 從我的數據庫中提取有關事務的數據。

我的 JSON 可以包含以下內容之一:

{"Data":{"Parties":[{"ID":"JackyID","Role":12}],"NbIDs":1}} #One party identified
{"Data":{"Parties":[{"ID":"JackyID","Role":12},{"ID":"SamNumber","Role":10}],"NbIDs":2}} #Two Parties identified
{"Data":{"Parties":[],"NbIDs":0}} #No parties identified
{"Data": None} #No data

當希望提取ID (當事方的 ID - String 數據類型)和Role (Int 數據類型 - 當 Role=12 時指買家,當 Role=10 時指賣家)的值並將其寫入 pandas 數據幀時,我使用以下代碼:

for i,row in df.iterrows():
    json_data = json.dumps(row['Data'])
    data = pd_json.loads(json_data)
data_json = json.loads(data)
df['ID'] = pd.json_normalize(data_json, ['Data', 'Parties'])['ID']
df['Role'] = pd.json_normalize(data_json, ['Data', 'Parties'])['Role']

現在,當嘗試檢查其值並為每個Role提供其對應的ID時:

for i,row in df.iterrows():
    if row['Role'] == 12:
        df.at[i,'Buyer'] = df.at[i,'ID']
    elif row['Role'] == 10:
        df.at[i,'Seller'] = df.at[i,'ID']

df = df[['Buyer', 'Seller']]

給定場景的預期 df 結果應如下所示:

{"Data":{"Parties":[{"ID":"JackyID","Role":12}],"NbIDs":1}} #Transaction 1
{"Data":{"Parties":[{"ID":"JackyID","Role":12},{"ID":"SamNumber","Role":10}],"NbIDs":2}} #Transaction 2
{"Data":{"Parties":[],"NbIDs":0}} #Transaction 3
{"Data": None} #Transaction 4
>>print(df)
Buyer  | Seller
------------------
JackyID|              #Transaction 1 we have info about the buyer
JackyID| SamNumber    #Transaction 2 we have infos about the buyer and the seller
       |              #Transaction 3 we don't have any infos about the parties
       |              #Transaction 4 we don't have any infos about the parties

這樣做的正確方法是什么?

您可以特別考慮沒有Data作為空Parties的情況 4

df = pd.DataFrame(data['Data']['Parties'] if data['Data'] else [], columns=['ID', 'Role'])
df['Role'] = df['Role'].map({10: 'Seller', 12: 'Buyer'})

然后為Role添加可能的缺失值

df = df.set_index('Role').reindex(['Seller', 'Buyer'], fill_value=pd.NA).T
print(df)

# Case 1
Role Seller    Buyer
ID     <NA>  JackyID

# Case 2
Role     Seller    Buyer
ID    SamNumber  JackyID

# Case 3
Role Seller Buyer
ID     <NA>  <NA>

# Case 4
Role Seller Buyer
ID     <NA>  <NA>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM