pandas的版本为:0.25.1
一、问题:
如何将表格中的数据转换成字典格式,如:{a:11,b:22,....}?
解决办法有很多种,比如
可以用字典推导式:
df = pd.DataFrame(data=[11,22,33,44], index=['a','b','c','d']).rename(columns={0:'code'})`# 利用itertuples()转成字典格式{i:v for i,v in df.itertuples()}
也可以利用pandas中to_dict()进行转换:
df.T.to_dict('r')[0]
或者
df.code.to_dict()
用两种方法转换起来都不难,但是如何将下图转换成
{a:{'1':41, '2':98,'3':53},'b':{'1':15,'2':64,'3':36}}
二、to_dict()介绍
在解决问题之前,先介绍一下pandas中的to_dict()函数,to_dict()函数有两种用法,pd.DataFrame.todict()和pd.Series.to_dict(),其中Series.to_dict()较简单
Series.to_dict(): 将Series转换成{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()函数介绍完了,那该如何利用to_dict()解决文章开头提到的那个问题?
完整代码:
new_df = df.set_index(['code', 'date']).unstack(level=0).droplevel(level=0, axis=1).to_dict()
欢迎批评指正