簡體   English   中英

解包嵌套記錄時出現 KeyError

[英]KeyError when unpacking nested record

我在下面有這段代碼,旨在在找到嵌套記錄時解包。 有時它有效,有時它會引發錯誤。

有人知道如何解決這個問題嗎?

數據(作品):

d = { 
    "_id" : 245, 
    "connId" : "3r34b32", 
    "roomList" : [
        {
            "reportId" : 29, 
            "siteId" : 1
        }]
}

數據(無效):

d = { 
    "_id" : 2, 
    "connId" : 128, 
    "Config" : {
        "Id" : 5203, 
        "TemplateId" : "587", 
        "alertRules" : [
            {
                "id" : 6, 
                "daysOfTheWeek" : [
                    "mon", 
                    "tue", 
                    "wed", 
                    "thu", 
                    "fri", 
                    "sat", 
                    "sun"
                ], 
            }
        ]
    }}

代碼(動態):

root = pd.json_normalize(d)
nested_cols = [i for i in root.columns if isinstance(root[i][0], list)]

l = [root.drop(nested_cols,1),]
for i in nested_cols:
    l.append(pd.json_normalize(d, record_path=i))

output = pd.concat(l, axis=1)
print(output)

回溯錯誤:

Traceback (most recent call last):
  File "c:/Users/Max/Desktop/Azure/TestTimerTrigger/testing.py", line 30, in <module>
    l.append(pd.json_normalize(d, record_path=i))
  File "c:\Users\Max\Desktop\Azure\.venv\lib\site-packages\pandas\io\json\_normalize.py", line 336, in _json_normalize   
    _recursive_extract(data, record_path, {}, level=0)
  File "c:\Users\Max\Desktop\Azure\.venv\lib\site-packages\pandas\io\json\_normalize.py", line 309, in _recursive_extract
    recs = _pull_records(obj, path[0])
  File "c:\Users\Max\Desktop\Azure\.venv\lib\site-packages\pandas\io\json\_normalize.py", line 248, in _pull_records     
    result = _pull_field(js, spec)
  File "c:\Users\Max\Desktop\Azure\.venv\lib\site-packages\pandas\io\json\_normalize.py", line 239, in _pull_field
    result = result[spec]
KeyError: 'Config.alertRules'

預期 Output:

_id,connid,config.id,config.templateid,id,daysoftheweek
2,128,5203,587,6,[mon,tue,wed,thu,fri,sat,sun]

注意:我知道keyerror是無法找到字典中的鍵,但是,我不確定如何解決這個問題。

任何幫助或指導將不勝感激。

它正在您的字典中尋找關鍵的Config.alertRules ,例如d["Config.alertRules"] 它是一個嵌套的字典,所以你應該像d["Config"]["alertRules"]一樣索引它,你是如何傳遞這些鍵的?

您的第一個字典可能不會發生此錯誤,因為那里沒有嵌套的字典。 d["roomList"]是一個列表)

暫無
暫無

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

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