来自列表字典的数据框
问题描述:
有没有一种方法可以用纯粹的熊猫方法来实现以下目标?或者实际上是更合理的重新排列字典本身?来自列表字典的数据框
初始字典:
而且我想获得一个数据帧,其中列名会被嵌套字典键:
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',...})
介意重新排序最初的字典,但我希望整个事情尽可能干净。
答
我会加载两个“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)
,所以我可以a
前b
:
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
你介意加入你期待请输出数据帧? –
当然,不知道如何正确格式化,虽然 – kakk11
你的方式很好。所以基本上你不再关心'a'或'b',而是价值清单中的其他项目。 –