簡體   English   中英

使用 Pandas 將嵌套的 JSON 轉換為 CSV

[英]Convert Nested JSON to CSV using Pandas

我正在嘗試使用 Pandas 將嵌套的 JSON 轉換為 CSV。 我看過這里提出的類似問題,但我似乎無法應用於我的場景。 我的 JSON 如下

{
 "51% FIFTY ONE PERCENT(PWD)" : {
 "ID" : "51%1574233975114-WEBAD",
 "contactName" : "",
 "createdAt" : 1574233975,
 "debit" : 118268.19999999995,
 "defaultCompany" : "",
 "emailAddress" : "",
 "lastUpdatedAt" : "",
 "phoneNumber" : "",
 "taskNumber" : 0
},
 "51% STORE (MUZ)" : {
 "ID" : "51%1576650784631-WEBAD",
 "contactName" : "",
 "createdAt" : 1576650784,
 "debit" : 63860,
 "defaultCompany" : "",
 "emailAddress" : "",
 "lastUpdatedAt" : "",
 "phoneNumber" : "",
 "taskNumber" : 0
},
 "ABBOTT S" : {
  "STORE (ABD)" : {
   "ID" : "ABB1574833257715-WEBAD",
   "contactName" : "",
   "createdAt" : 1574833257,
   "debit" : 35065,
   "defaultCompany" : "",
   "emailAddress" : "",
   "lastUpdatedAt" : "",
   "phoneNumber" : "",
   "taskNumber" : 0
 }
}
}

這是 JSON 的一個片段,正如您所看到的,有些條目(並非全部)是嵌套的。 我嘗試使用 json_normalize 以下方式即

import json
from pandas.io.json import json_normalize  

with open('.\Customers\kontrolkotlin-CUSTOMERS-export.json') as f:
d = json.load(f)

nycphil = json_normalize(data = d)
nycphil

並得到一個單行數據幀作為輸出,如下所示在此處輸入圖片說明 這似乎不起作用,因為我想要一些可讀和可以理解的東西。

您可以獲取直接數據,例如:

nycphil = json_normalize(d['51% STORE (MUZ)'])
nycphil.head(3)
print(nycphil.head(3))

在此處輸入圖片說明

或者嘗試做這樣的事情

df = read_json('some.json')
df.to_csv() 
print(df)

輸出在此處輸入圖片說明

我敢肯定有一個更簡單的說法,但是......

如果您假設嵌套 JSON 的葉子都具有相同的字段( IDcontactName等...),那么您可以遞歸地展平您的 JSON 並創建一個記錄列表,保留將您帶到葉子的路徑。

就像是:

def flatten_json(x, path="", result=None):
    if result is None:
        result=[]
    if "ID" in x:
        result.append({**x, "path": path})
        return
    for key in x:
        flatten_json(x[key], path + "/" + key, result)
    return result

df = pd.DataFrame(flatten_json(data))
print(df)

結果:

                       ID contactName   createdAt     debit defaultCompany  \
0  51%1574233975114-WEBAD              1574233975  118268.2                  
1  51%1576650784631-WEBAD              1576650784   63860.0                  
2  ABB1574833257715-WEBAD              1574833257   35065.0                  

  emailAddress lastUpdatedAt phoneNumber  taskNumber  \
0                                                  0   
1                                                  0   
2                                                  0   

                          path  
0  /51% FIFTY ONE PERCENT(PWD)  
1             /51% STORE (MUZ)  
2        /ABBOTT S/STORE (ABD)  

暫無
暫無

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

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