[英]dataframe from dictionary of lists
有沒有一種方法可以完全遵循pandas方法進行操作,或者實際上首先重新安排字典本身是否更合理?
初始字典:
data_json = {'a':[{'aa':1,'bb':2,'cc':3},
{'aa':2,'bb':2,'cc':3},
{'aa':3,'bb':2,'cc':3}],
'b':[{'beta':22,'alpha':23,'gamma':24},
{'gamma':24,'beta':25,'alpha':26},
{'alpha':34,'beta':35,'gamma':36}]}
我想獲得一個數據框,其中列名將嵌套字典鍵:
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)
我會用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]:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.