用 Pandas 解压嵌套数据

Rob*_*ley 0 python pandas

你好,我有一个令人讨厌的字典列表,我想将其放入数据框中

data = [
    {
        "name": "pod_name",
        "type": "group",
        "values": [
            [
                "7b977b5d68-mdwfc"
            ],
            [
                "d8b746cdf-hn5dx"
            ],
            [
                "d8b746cdf-wmxdq"
            ],
            [
                "d8b746cdf-8dv65"
            ],
            [
                "d8b746cdf-9dn2c"
            ],
            [
                "d8b746cdf-rh5c5"
            ],
            [
                "d8b746cdf-q5fz6"
            ],
            [
                "d8b746cdf-hvdmd"
            ],
            [
                "d8b746cdf-fgzcj"
            ],
            [
                "d8b746cdf-lhclk"
            ]
        ]
    },
    {
        "name": "cpu_limit",
        "type": "number",
        "values": [
            2.5,
            1.5,
            1.5,
            1.5,
            1.5,
            1.5,
            1.5,
            1.5,
            1.5,
            1.5
        ]
    },
    {
        "name": "mem_limit",
        "type": "number",
        "values": [
            10737418240.0,
            2147483648.0,
            2147483648.0,
            2147483648.0,
            2147483648.0,
            2147483648.0,
            2147483648.0,
            2147483648.0,
            2147483648.0,
            2147483648.0
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

每个字典都是目标数据框中的一列,“名称”作为列,列表“值”作为数据。

到目前为止我的解决方案是这样的:

df = pd.DataFrame()
for col in data:
    df[col['name']] = col['values']
print(df.head())
Run Code Online (Sandbox Code Playgroud)

老实说,这是相当干净的,但我很好奇是否有任何 pythonista 有更好的解决方案。(仅供参考,我正在研究 pandas 0.25...)

Cor*_*ien 6

我宁愿在构造 DataFrame 之前使用字典理解以避免内存碎片:

df = pd.DataFrame({col['name']: col['values'] for col in data})
print(df)

# Output
             pod_name  cpu_limit     mem_limit
0  [7b977b5d68-mdwfc]        2.5  1.073742e+10
1   [d8b746cdf-hn5dx]        1.5  2.147484e+09
2   [d8b746cdf-wmxdq]        1.5  2.147484e+09
3   [d8b746cdf-8dv65]        1.5  2.147484e+09
4   [d8b746cdf-9dn2c]        1.5  2.147484e+09
5   [d8b746cdf-rh5c5]        1.5  2.147484e+09
6   [d8b746cdf-q5fz6]        1.5  2.147484e+09
7   [d8b746cdf-hvdmd]        1.5  2.147484e+09
8   [d8b746cdf-fgzcj]        1.5  2.147484e+09
9   [d8b746cdf-lhclk]        1.5  2.147484e+09
Run Code Online (Sandbox Code Playgroud)