来自列表字典的数据框

问题描述:

有没有一种方法可以用纯粹的熊猫方法来实现以下目标?或者实际上是更合理的重新排列字典本身?来自列表字典的数据框

初始字典:

​​

而且我想获得一个数据帧,其中列名会被嵌套字典键:

aa bb cc alpha beta gamma 
1 1 2 3 23 22 24 
2 2 2 3 26 25 24 
3 3 2 3 34 35 36 

尝试:

aaa = pd.DataFrame(data_json) 
foo = lambda x: pd.Series([i for i in x.items()]) 
bbb=pd.concat([aaa['a'].apply(foo),aaa['b'].apply(foo)],axis=1) 

给出我

0 1 2  0 1  2 
1 1 2 3 23 22 24 
2 2 2 3 26 25 24 
3 3 2 3 34 35 36 

但现在我坚持,因为列名重复[0,1,2,0,1,2]和我说我不要,我不能只使用

bbb.rename(columns={0:'a',1:'b',...}) 

介意重新排序最初的字典,但我希望整个事情尽可能干净。

+0

你介意加入你期待请输出数据帧? –

+0

当然,不知道如何正确格式化,虽然 – kakk11

+0

你的方式很好。所以基本上你不再关心'a'或'b',而是价值清单中的其他项目。 –

我会加载两个“A”和“B”分别和他们一起(合并它们在指数):

pd.DataFrame(data_json['a']).join(pd.DataFrame(data_json['b'])) 


    aa bb cc alpha beta gamma 
0 1 2 3  23 22  24 
1 2 2 3  26 25  24 
2 3 2 3  34 35  36 

的另一种方式,在情况下一个循环,你不知道有多少data_json.keys()你有,然后使用pd.concat,因为它是一个列表更方便。请注意,我用 sorted(data_json),所以我可以ab

list_df = [] 
for k in sorted(data_json): 
    list_df.append(pd.DataFrame(data_json[k])) 
pd.concat(list_df, axis=1) 
+1

谢谢,这很好。 – kakk11

我会用concat。注:

In [11]: pd.DataFrame(data_json['a']) 
Out[11]: 
    aa bb cc 
0 1 2 3 
1 2 2 3 
2 3 2 3 

In [12]: pd.DataFrame(data_json['b']) 
Out[12]: 
    alpha beta gamma 
0  23 22  24 
1  26 25  24 
2  34 35  36 

所以干脆:

In [13]: pd.concat((pd.DataFrame(v) for v in data_json.values()), axis=1) 
Out[13]: 
    alpha beta gamma aa bb cc 
0  23 22  24 1 2 3 
1  26 25  24 2 2 3 
2  34 35  36 3 2 3 

In [14]: 
+0

感谢您提供更一般的解决方案。 – kakk11