繁体   English   中英

在 Python 中将字典转换为 DataFrame - 3 个键和 1 个值深度

[英]Converting a Dictionary to DataFrame in Python - 3 Keys and 1 Value Depth

进一步从这篇文章这里...

我如何修改此解决方案以增加 1 个密钥深度; 还是n键?


我有一个静态结构的字典:

Key: Key: Key: Value

示例词典:

{
    "id_1": {   
            "Emissions": {
                "305-1": [
                    "2014_249989",
                    "2015_339998",
                    "2016_617957",
                    "2017_827230"
                ],
                 "305-2": [
                    "2014_33163",
                    "2015_64280",
                    "2016_502748",
                    "2017_675091"
                ],
            },
            "Effluents and Waste": {
                "306-1": [
                    "2014_143.29",
                    "2015_277.86",
                    "2016_385.67",
                    "2017_460.6"
                ],
                "306-2": "blah blah blah",
             }
        }
}

我想要一个这种结构的 DataFrame:

Grand Key | Parent Key | Child Key | Child Value
Grand Key | Parent Key | Child Key | Child Value
Grand Key | Parent Key | Child Key | Child Value
Grand Key | Parent Key | Child Key | Child Value

所需数据帧示例:

id_1 | Emissions | 305-1 | ["2014_249989", "2015_339998", "2016_617957", "2017_827230"]
id_1 | Emissions | 305-2 | ["2014_33163", "2015_64280", "2016_502748", "2017_675091"]
id_1 | Effluents and Waste| 306-1 | ["2014_249989", "2015_339998", "2016_617957", "2017_827230"]
id_1 | Effluents and Waste | 306-2 | blah blah blah

尝试的解决方案:

许多尝试,都类似于具有额外的for-loop

data = [[key, ikey, jkey, value] for key, values in data.items() for ikey, value in values.items() for jkey, value in values.items()]

如果有我可以澄清的更多细节/细微差别,请告诉我。

尝试:

import pandas as pd

data = {
    "id_1": {
        "Emissions": {
            "305-1": ["2014_249989","2015_339998","2016_617957","2017_827230"],
            "305-2": ["2014_33163","2015_64280","2016_502748","2017_675091"],
        },
        "Effluents and Waste": {
            "306-1": ["2014_143.29","2015_277.86","2016_385.67","2017_460.6"],
            "306-2": "blah blah blah",
        }
    }
}


def nested_items(d, path=None):
    for key, value in d.items():
        if isinstance(value, dict):
            yield from nested_items(value, path=[key] if path is None else path + [key])
        else:
            yield path + [key], value


res = pd.DataFrame([[*path, value] for path, value in nested_items(data)])
print(res)

输出

      0  ...                                                  3
0  id_1  ...  [2014_249989, 2015_339998, 2016_617957, 2017_8...
1  id_1  ...  [2014_33163, 2015_64280, 2016_502748, 2017_675...
2  id_1  ...  [2014_143.29, 2015_277.86, 2016_385.67, 2017_4...
3  id_1  ...                                     blah blah blah

[4 rows x 4 columns]

我修改了另外 1 个关键深度的解决方案

import pandas as pd

data = {
    "id_1": {   
            "Emissions": {
                "305-1": [
                    "2014_249989",
                    "2015_339998",
                    "2016_617957",
                    "2017_827230"
                ],
                 "305-2": [
                    "2014_33163",
                    "2015_64280",
                    "2016_502748",
                    "2017_675091"
                ],
            },
            "Effluents and Waste": {
                "306-1": [
                    "2014_143.29",
                    "2015_277.86",
                    "2016_385.67",
                    "2017_460.6"
                ],
                "306-2": "blah blah blah",
             }
        }
}
data = [
    [key, ikey, iikey, value]
    for key, valuess in data.items()
    for ikey, values in valuess.items()
    for iikey, value in values.items()
]
res = pd.DataFrame.from_dict(data)

print(res)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM