对pandas中to_dict的用法详解


Posted in Python onJune 05, 2018

简介:pandas 中的to_dict 可以对DataFrame类型的数据进行转换

可以选择六种的转换类型,分别对应于参数 ‘dict', ‘list', ‘series', ‘split', ‘records', ‘index',下面逐一介绍每种的用法

Help on method to_dict in module pandas.core.frame:
to_dict(orient='dict') method of pandas.core.frame.DataFrame instance
 Convert DataFrame to dictionary.
 Parameters
 ----------
 orient : str {'dict', 'list', 'series', 'split', 'records', 'index'}
 Determines the type of the values of the dictionary.
 - dict (default) : dict like {column -> {index -> value}}
 - list : dict like {column -> [values]}
 - series : dict like {column -> Series(values)}
 - split : dict like
  {index -> [index], columns -> [columns], data -> [values]}
 - records : list like
  [{column -> value}, ... , {column -> value}]
 - index : dict like {index -> {column -> value}}
  .. versionadded:: 0.17.0
 Abbreviations are allowed. `s` indicates `series` and `sp`
 indicates `split`.
 Returns
 -------
 result : dict like {column -> {index -> value}}

1、选择参数orient='dict'

dict也是默认的参数,下面的data数据类型为DataFrame结构, 会形成 {column -> {index -> value}}这样的结构的字典,可以看成是一种双重字典结构

- 单独提取每列的值及其索引,然后组合成一个字典

- 再将上述的列属性作为关键字(key),值(values)为上述的字典

查询方式为 :data_dict[key1][key2]

- data_dict 为参数选择orient='dict'时的数据名

- key1 为列属性的键值(外层)

- key2 为内层字典对应的键值

data 
Out[9]: 
 pclass age embarked   home.dest sex
1086 3rd 31.194181 UNKNOWN   UNKNOWN male
12 1st 31.194181 Cherbourg   Paris, France female
1036 3rd 31.194181 UNKNOWN   UNKNOWN male
833 3rd 32.000000 Southampton Foresvik, Norway Portland, ND male
1108 3rd 31.194181 UNKNOWN   UNKNOWN male
562 2nd 41.000000 Cherbourg   New York, NY male
437 2nd 48.000000 Southampton Somerset / Bernardsville, NJ female
663 3rd 26.000000 Southampton   UNKNOWN male
669 3rd 19.000000 Southampton   England male
507 2nd 31.194181 Southampton  Petworth, Sussex male
In[10]: data_dict=data.to_dict(orient= 'dict')
In[11]: data_dict
Out[11]: 
{'age': {12: 31.19418104265403,
 437: 48.0,
 507: 31.19418104265403,
 562: 41.0,
 663: 26.0,
 669: 19.0,
 833: 32.0,
 1036: 31.19418104265403,
 1086: 31.19418104265403,
 1108: 31.19418104265403},
 'embarked': {12: 'Cherbourg',
 437: 'Southampton',
 507: 'Southampton',
 562: 'Cherbourg',
 663: 'Southampton',
 669: 'Southampton',
 833: 'Southampton',
 1036: 'UNKNOWN',
 1086: 'UNKNOWN',
 1108: 'UNKNOWN'},
 'home.dest': {12: 'Paris, France',
 437: 'Somerset / Bernardsville, NJ',
 507: 'Petworth, Sussex',
 562: 'New York, NY',
 663: 'UNKNOWN',
 669: 'England',
 833: 'Foresvik, Norway Portland, ND',
 1036: 'UNKNOWN',
 1086: 'UNKNOWN',
 1108: 'UNKNOWN'},
 'pclass': {12: '1st',
 437: '2nd',
 507: '2nd',
 562: '2nd',
 663: '3rd',
 669: '3rd',
 833: '3rd',
 1036: '3rd',
 1086: '3rd',
 1108: '3rd'},
 'sex': {12: 'female',
 437: 'female',
 507: 'male',
 562: 'male',
 663: 'male',
 669: 'male',
 833: 'male',
 1036: 'male',
 1086: 'male',
 1108: 'male'}}

2、当关键字orient=' list' 时

和1中比较相似,只不过内层变成了一个列表,结构为{column -> [values]}

查询方式为: data_list[keys][index]

data_list 为关键字orient='list' 时对应的数据名

keys 为列属性的键值,如本例中的'age' , ‘embarked'等

index 为整型索引,从0开始到最后

In[19]: data_list=data.to_dict(orient='list')
In[20]: data_list
Out[20]: 
{'age': [31.19418104265403,
 31.19418104265403,
 31.19418104265403,
 32.0,
 31.19418104265403,
 41.0,
 48.0,
 26.0,
 19.0,
 31.19418104265403],
 'embarked': ['UNKNOWN',
 'Cherbourg',
 'UNKNOWN',
 'Southampton',
 'UNKNOWN',
 'Cherbourg',
 'Southampton',
 'Southampton',
 'Southampton',
 'Southampton'],
 'home.dest': ['UNKNOWN',
 'Paris, France',
 'UNKNOWN',
 'Foresvik, Norway Portland, ND',
 'UNKNOWN',
 'New York, NY',
 'Somerset / Bernardsville, NJ',
 'UNKNOWN',
 'England',
 'Petworth, Sussex'],
 'pclass': ['3rd',
 '1st',
 '3rd',
 '3rd',
 '3rd',
 '2nd',
 '2nd',
 '3rd',
 '3rd',
 '2nd'],
 'sex': ['male',
 'female',
 'male',
 'male',
 'male',
 'male',
 'female',
 'male',
 'male',
 'male']}

3、关键字参数orient='series'

形成结构{column -> Series(values)}

调用格式为:data_series[key1][key2]或data_dict[key1]

data_series 为数据对应的名字

key1 为列属性的键值,如本例中的'age' , ‘embarked'等

key2 使用数据原始的索引(可选)

In[21]: data_series=data.to_dict(orient='series')
In[22]: data_series
Out[22]: 
{'age': 1086 31.194181
 12 31.194181
 1036 31.194181
 833 32.000000
 1108 31.194181
 562 41.000000
 437 48.000000
 663 26.000000
 669 19.000000
 507 31.194181
 Name: age, dtype: float64, 'embarked': 1086 UNKNOWN
 12 Cherbourg
 1036 UNKNOWN
 833 Southampton
 1108 UNKNOWN
 562 Cherbourg
 437 Southampton
 663 Southampton
 669 Southampton
 507 Southampton
 Name: embarked, dtype: object, 'home.dest': 1086    UNKNOWN
 12   Paris, France
 1036    UNKNOWN
 833 Foresvik, Norway Portland, ND
 1108    UNKNOWN
 562   New York, NY
 437 Somerset / Bernardsville, NJ
 663    UNKNOWN
 669    England
 507   Petworth, Sussex
 Name: home.dest, dtype: object, 'pclass': 1086 3rd
 12 1st
 1036 3rd
 833 3rd
 1108 3rd
 562 2nd
 437 2nd
 663 3rd
 669 3rd
 507 2nd
 Name: pclass, dtype: object, 'sex': 1086 male
 12 female
 1036 male
 833 male
 1108 male
 562 male
 437 female
 663 male
 669 male
 507 male
 Name: sex, dtype: object}

4、关键字参数orient='split'

形成{index -> [index], columns -> [columns], data -> [values]}的结构,是将数据、索引、属性名单独脱离出来构成字典

调用方式有 data_split[‘index'],data_split[‘data'],data_split[‘columns']

data_split=data.to_dict(orient='split')
data_split
Out[38]: 
{'columns': ['pclass', 'age', 'embarked', 'home.dest', 'sex'],
 'data': [['3rd', 31.19418104265403, 'UNKNOWN', 'UNKNOWN', 'male'],
 ['1st', 31.19418104265403, 'Cherbourg', 'Paris, France', 'female'],
 ['3rd', 31.19418104265403, 'UNKNOWN', 'UNKNOWN', 'male'],
 ['3rd', 32.0, 'Southampton', 'Foresvik, Norway Portland, ND', 'male'],
 ['3rd', 31.19418104265403, 'UNKNOWN', 'UNKNOWN', 'male'],
 ['2nd', 41.0, 'Cherbourg', 'New York, NY', 'male'],
 ['2nd', 48.0, 'Southampton', 'Somerset / Bernardsville, NJ', 'female'],
 ['3rd', 26.0, 'Southampton', 'UNKNOWN', 'male'],
 ['3rd', 19.0, 'Southampton', 'England', 'male'],
 ['2nd', 31.19418104265403, 'Southampton', 'Petworth, Sussex', 'male']],
 'index': [1086, 12, 1036, 833, 1108, 562, 437, 663, 669, 507]}

5、当关键字orient='records' 时

形成[{column -> value}, … , {column -> value}]的结构

整体构成一个列表,内层是将原始数据的每行提取出来形成字典

调用格式为data_records[index][key1]

data_records=data.to_dict(orient='records')
data_records
Out[41]: 
[{'age': 31.19418104265403,
 'embarked': 'UNKNOWN',
 'home.dest': 'UNKNOWN',
 'pclass': '3rd',
 'sex': 'male'},
 {'age': 31.19418104265403,
 'embarked': 'Cherbourg',
 'home.dest': 'Paris, France',
 'pclass': '1st',
 'sex': 'female'},
 {'age': 31.19418104265403,
 'embarked': 'UNKNOWN',
 'home.dest': 'UNKNOWN',
 'pclass': '3rd',
 'sex': 'male'},
 {'age': 32.0,
 'embarked': 'Southampton',
 'home.dest': 'Foresvik, Norway Portland, ND',
 'pclass': '3rd',
 'sex': 'male'},
 {'age': 31.19418104265403,
 'embarked': 'UNKNOWN',
 'home.dest': 'UNKNOWN',
 'pclass': '3rd',
 'sex': 'male'},
 {'age': 41.0,
 'embarked': 'Cherbourg',
 'home.dest': 'New York, NY',
 'pclass': '2nd',
 'sex': 'male'},
 {'age': 48.0,
 'embarked': 'Southampton',
 'home.dest': 'Somerset / Bernardsville, NJ',
 'pclass': '2nd',
 'sex': 'female'},
 {'age': 26.0,
 'embarked': 'Southampton',
 'home.dest': 'UNKNOWN',
 'pclass': '3rd',
 'sex': 'male'},
 {'age': 19.0,
 'embarked': 'Southampton',
 'home.dest': 'England',
 'pclass': '3rd',
 'sex': 'male'},
 {'age': 31.19418104265403,
 'embarked': 'Southampton',
 'home.dest': 'Petworth, Sussex',
 'pclass': '2nd',
 'sex': 'male'}]

6、当关键字orient='index' 时

形成{index -> {column -> value}}的结构,调用格式正好和'dict' 对应的反过来,请读者自己思考

data_index=data.to_dict(orient='index')
data_index
Out[43]: 
{12: {'age': 31.19418104265403,
 'embarked': 'Cherbourg',
 'home.dest': 'Paris, France',
 'pclass': '1st',
 'sex': 'female'},
 437: {'age': 48.0,
 'embarked': 'Southampton',
 'home.dest': 'Somerset / Bernardsville, NJ',
 'pclass': '2nd',
 'sex': 'female'},
 507: {'age': 31.19418104265403,
 'embarked': 'Southampton',
 'home.dest': 'Petworth, Sussex',
 'pclass': '2nd',
 'sex': 'male'},
 562: {'age': 41.0,
 'embarked': 'Cherbourg',
 'home.dest': 'New York, NY',
 'pclass': '2nd',
 'sex': 'male'},
 663: {'age': 26.0,
 'embarked': 'Southampton',
 'home.dest': 'UNKNOWN',
 'pclass': '3rd',
 'sex': 'male'},
 669: {'age': 19.0,
 'embarked': 'Southampton',
 'home.dest': 'England',
 'pclass': '3rd',
 'sex': 'male'},
 833: {'age': 32.0,
 'embarked': 'Southampton',
 'home.dest': 'Foresvik, Norway Portland, ND',
 'pclass': '3rd',
 'sex': 'male'},
 1036: {'age': 31.19418104265403,
 'embarked': 'UNKNOWN',
 'home.dest': 'UNKNOWN',
 'pclass': '3rd',
 'sex': 'male'},
 1086: {'age': 31.19418104265403,
 'embarked': 'UNKNOWN',
 'home.dest': 'UNKNOWN',
 'pclass': '3rd',
 'sex': 'male'},
 1108: {'age': 31.19418104265403,
 'embarked': 'UNKNOWN',
 'home.dest': 'UNKNOWN',
 'pclass': '3rd',
 'sex': 'male'}}

以上这篇对pandas中to_dict的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python操作数据库之sqlite3打开数据库、删除、修改示例
Mar 13 Python
Python 关于反射和类的特殊成员方法
Sep 14 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
基于python指定包的安装路径方法
Oct 27 Python
numpy 返回函数的上三角矩阵实例
Nov 25 Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 Python
SpringBoot实现登录注册常见问题解决方案
Mar 04 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
Jun 11 Python
python中如何写类
Jun 29 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
Jul 13 Python
python 利用jieba.analyse进行 关键词提取
Dec 17 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 #Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 #Python
Python实现迭代时使用索引的方法示例
Jun 05 #Python
Numpy 将二维图像矩阵转换为一维向量的方法
Jun 05 #Python
django反向解析和正向解析的方式
Jun 05 #Python
Python numpy实现二维数组和一维数组拼接的方法
Jun 05 #Python
Python实现字典(dict)的迭代操作示例
Jun 05 #Python
You might like
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
php实现模拟post请求用法实例
2015/07/11 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
jQuery 创建Dom元素
2010/05/07 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
简单谈谈Vue 模板各类数据绑定
2016/09/25 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
python dict.get()和dict['key']的区别详解
2016/06/30 Python
python for循环输入一个矩阵的实例
2018/11/14 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
Python3 批量扫描端口的例子
2019/07/25 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
python中with用法讲解
2020/02/07 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
利用python 读写csv文件
2020/09/10 Python
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
医生实习工作总结的自我评价
2013/09/27 职场文书
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
医护人员英文求职信范文
2013/11/26 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
MySQL索引失效的典型案例
2021/06/05 MySQL
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android