从嵌套字典创建多列 Pandas 数据帧

4

我有一个字典长这样:

{"key1":[0.], "key2":{"a":[0.],"b":[0.],"c":[0.]}, "key3":[0.]}

有没有一种优雅的方法来创建一个带有嵌套键 a,b,c 作为子列的 Pandas DataFrame?

所有的 list 都包含 float 值。

+------+-----------+------+
| key1 | key2      | key3 |
+------+-----------+------+
|      | a | b | c |      |
+------+---+---+---+------+
| 0    | 0 | 0 | 0 | 0    |
+------+---+---+---+------+

这个零 "key1":[0.] 应该放在哪里?你能展示一下预期的输出吗? - rafaelc
在同一数据框中,如果我正确理解了您的问题。总共将会有5列。 - Nick
1个回答

3

这是冗长的方法。请注意,您的列的第二级应该有一个值。在这里,我已将其设置为0,因为它没有被指定。

d = {"key1":[0.], "key2":{"a":[1.],"b":[2.],"c":[3.]}, "key3":[4.]}

cols, data = [], []
for k, v in d.items():
    if not isinstance(v, dict):
        cols.append((k, 0))
        data.append(v)
    else:
        for k2, v2 in v.items():
            cols.append((k, k2))
            data.append(v2)

df = pd.DataFrame(list(zip(*data)), columns=pd.MultiIndex.from_tuples(cols))

print(df)

  key1 key2           key3
     0    a    b    c    0
0  0.0  1.0  2.0  3.0  4.0

1
我的解决方案和你的如此相似,以至于我甚至不会发表它 ;) - rafaelc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接