pandas的版本為:0.25.1
一、問題:
如何將表格中的數(shù)據(jù)轉(zhuǎn)換成字典格式仅仆,如:{a:11,b:22,....}入篮?
解決辦法有很多種,比如
可以用字典推導(dǎo)式:
df = pd.DataFrame(data=[11,22,33,44], index=['a','b','c','d']).rename(columns={0:'code'})`# 利用itertuples()轉(zhuǎn)成字典格式{i:v for i,v in df.itertuples()}
也可以利用pandas中to_dict()進(jìn)行轉(zhuǎn)換:
df.T.to_dict('r')[0]
或者
df.code.to_dict()
用兩種方法轉(zhuǎn)換起來都不難拯腮,但是如何將下圖轉(zhuǎn)換成
{a:{'1':41, '2':98,'3':53},'b':{'1':15,'2':64,'3':36}}? ? ? ?
二窖式、to_dict()介紹
在解決問題之前,先介紹一下pandas中的to_dict()函數(shù)疾瓮,to_dict()函數(shù)有兩種用法脖镀,pd.DataFrame.todict()和pd.Series.to_dict(),其中Series.to_dict()較簡單
Series.to_dict(): 將Series轉(zhuǎn)換成{index:value}
具體用法狼电,可參考文章開頭部分的:df.code.to_dict()
DataFrame.to_dict(orient='dict',into=')
orient: 'dict','list','series','split','records','index'
'dict':? {column->{index->values}}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {c1:{r0:11, r1:44, r2:77},? c2:{r0:22, r1:55, r2:88}}
'list': {column:[values]}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {c1:[11, 44,77], c2:[22, 55, 88]}
'series':{column->series}
{c1: series, c2:series}
'split':{index->[index], column->[column], value->[value]}
? ? ? ? ? ? {index:[r0, r1, r2], column:[c1, c2], value:[11, 22, 44, 55, 77, 88]}
'record':[{column->value}] 蜒灰,返回的為列表
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [{c1:11,c2:22},{c1:44, c2:55},{c1:77, c2:88}]
'index':{index->{column->value}}? ,與"dict"類似肩碟,只不過index與column互換位置
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {r0:{c1:11,c2:22},r1:{c1:44,c:55},r2:{c1:77,c2:88}}
三强窖、代碼
to_dict()函數(shù)介紹完了,那該如何利用to_dict()解決文章開頭提到的那個(gè)問題削祈?
完整代碼:
new_df = df.set_index(['code', 'date']).unstack(level=0).droplevel(level=0, axis=1).to_dict()
歡迎批評(píng)指正