【问题标题】:KeyError when unpacking nested record解包嵌套记录时出现 KeyError
【发布时间】:2021-05-19 04:00:48
【问题描述】:

我在下面有这段代码,旨在在找到嵌套记录时解包。有时它可以工作,有时它会引发错误。

有人知道如何解决这个问题吗?

数据(作品):

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'

预期输出:

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

注意: 我知道keyerror 是无法找到字典中的键,但是,我不确定如何解决这个问题。

任何帮助或指导将不胜感激。

【问题讨论】:

    标签: python pandas dictionary nested


    【解决方案1】:

    它正在您的字典中寻找密钥Config.alertRules,例如d["Config.alertRules"]。它是一个嵌套字典,所以你应该像 d["Config"]["alertRules"] 一样对其进行索引,你是如何传递这些键的?

    您的第一个字典可能不会出现此错误,因为那里没有嵌套的字典。 (d["roomList"] 是一个列表)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      相关资源
      最近更新 更多