Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解包嵌套记录时出现KeyError_Python_Pandas_Dictionary_Nested - Fatal编程技术网

Python 解包嵌套记录时出现KeyError

Python 解包嵌套记录时出现KeyError,python,pandas,dictionary,nested,Python,Pandas,Dictionary,Nested,下面我有一段代码,目的是在找到嵌套记录时解包。有时有效,有时出错 有人知道如何解决这个问题吗 数据(工作): d = { "_id" : 245, "connId" : "3r34b32", "roomList" : [ { "reportId" : 29, "siteId" : 1

下面我有一段代码,目的是在找到嵌套记录时解包。有时有效,有时出错

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

数据(工作):

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]
数据(不工作):

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]
代码(动态):

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]
回溯错误:

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
是指无法找到字典中的键,但我不确定如何解决此问题


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

它正在您的dict中查找键
Config.alertRules
,如
d[“Config.alertRules”]
。它是一个嵌套的dict,所以您应该像
d[“Config”][“alertRules”]
那样索引它,您如何传递这些键

此错误可能不会发生在您的第一个字典中,因为那里没有嵌套的dict。(
d[“roomList”]
是一个列表)