如何从带有列表的嵌套字典构建 MultiIndex Pandas DataFrame
How to build a MultiIndex Pandas DataFrame from a nested dictionary with lists
我有以下字典。
d= {'key1': {'sub-key1': ['a','b','c','d','e']},
'key2': {'sub-key2': ['1','2','3','5','8','9','10']}}
在 this post 的帮助下,我成功地将这个字典转换为 DataFrame。
df = pd.DataFrame.from_dict({(i,j): d[i][j]
for i in d.keys()
for j in d[i].keys()},
orient='index')
但是,我的 DataFrame 采用以下形式:
0 1 2 3 4 5 6
(key1, sub-key1) a b c d e None None
(key2, sub-key2) 1 2 3 5 8 9 10
我可以使用元组作为索引值,但我认为使用多级 DataFrame 会更好。 Post 例如 帮助我分两步创建它,但是我正在努力一步完成(即从最初创建),因为字典中的列表以及之后的元组增加了一定程度的复杂性。
我认为你很接近,因为 MultiIndex
可以使用 MultiIndex.from_tuples
方法:
d = {(i,j): d[i][j]
for i in d.keys()
for j in d[i].keys()}
mux = pd.MultiIndex.from_tuples(d.keys())
df = pd.DataFrame(list(d.values()), index=mux)
print (df)
0 1 2 3 4 5 6
key1 sub-key1 a b c d e None None
key2 sub-key2 1 2 3 5 8 9 10
谢谢, 另一种解决方案:
df = pd.DataFrame.from_dict({(i,j): d[i][j]
for i in d.keys()
for j in d[i].keys()},
orient='index')
df.index = pd.MultiIndex.from_tuples(df.index)
print (df)
0 1 2 3 4 5 6
key1 sub-key1 a b c d e None None
key2 sub-key2 1 2 3 5 8 9 10
我将 stack
用于两个级别 dict
...
df=pd.DataFrame(d)
df.T.stack().apply(pd.Series)
Out[230]:
0 1 2 3 4 5 6
key1 sub-key1 a b c d e NaN NaN
key2 sub-key2 1 2 3 5 8 9 10
我有以下字典。
d= {'key1': {'sub-key1': ['a','b','c','d','e']},
'key2': {'sub-key2': ['1','2','3','5','8','9','10']}}
在 this post 的帮助下,我成功地将这个字典转换为 DataFrame。
df = pd.DataFrame.from_dict({(i,j): d[i][j]
for i in d.keys()
for j in d[i].keys()},
orient='index')
但是,我的 DataFrame 采用以下形式:
0 1 2 3 4 5 6
(key1, sub-key1) a b c d e None None
(key2, sub-key2) 1 2 3 5 8 9 10
我可以使用元组作为索引值,但我认为使用多级 DataFrame 会更好。 Post 例如
我认为你很接近,因为 MultiIndex
可以使用 MultiIndex.from_tuples
方法:
d = {(i,j): d[i][j]
for i in d.keys()
for j in d[i].keys()}
mux = pd.MultiIndex.from_tuples(d.keys())
df = pd.DataFrame(list(d.values()), index=mux)
print (df)
0 1 2 3 4 5 6
key1 sub-key1 a b c d e None None
key2 sub-key2 1 2 3 5 8 9 10
谢谢,
df = pd.DataFrame.from_dict({(i,j): d[i][j]
for i in d.keys()
for j in d[i].keys()},
orient='index')
df.index = pd.MultiIndex.from_tuples(df.index)
print (df)
0 1 2 3 4 5 6
key1 sub-key1 a b c d e None None
key2 sub-key2 1 2 3 5 8 9 10
我将 stack
用于两个级别 dict
...
df=pd.DataFrame(d)
df.T.stack().apply(pd.Series)
Out[230]:
0 1 2 3 4 5 6
key1 sub-key1 a b c d e NaN NaN
key2 sub-key2 1 2 3 5 8 9 10