浅析pandas 数据结构中的DataFrame


Posted in Python onOctober 12, 2019

DataFrame 类型类似于数据库表结构的数据结构,其含有行索引和列索引,可以将DataFrame 想成是由相同索引的Series组成的Dict类型。在其底层是通过二维以及一维的数据块实现。

1. DataFrame 对象的构建

1.1 用包含等长的列表或者是NumPy数组的字典创建DataFrame对象

In [68]: import pandas as pd

In [69]: from pandas import Series,DataFrame

# 建立包含等长列表的字典类型
In [70]: data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],'year': [2000, 2001, 20
 ...: 02, 2001, 2002],'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
In [71]: data
Out[71]: 
{'pop': [1.5, 1.7, 3.6, 2.4, 2.9],
 'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
 'year': [2000, 2001, 2002, 2001, 2002]}
# 建立DataFrame对象
In [72]: frame1 = DataFrame(data)
# 红色部分为自动生成的索引
In [73]: frame1
Out[73]: 
 pop state year
0 1.5 Ohio 2000
1 1.7 Ohio 2001
2 3.6 Ohio 2002
3 2.4 Nevada 2001
4 2.9 Nevada 2002

在建立过程中可以指点列的顺序:

In [74]: frame1 = DataFrame(data,columns=['year', 'state', 'pop'])

In [75]: frame1
Out[75]: 
 year state pop
0 2000 Ohio 1.5
1 2001 Ohio 1.7
2 2002 Ohio 3.6
3 2001 Nevada 2.4
4 2002 Nevada 2.9

和Series一样,DataFrame也是可以指定索引内容:

In [76]: ind = ['one', 'two', 'three', 'four', 'five']
In [77]: frame1 = DataFrame(data,index = ind)

In [78]: frame1
Out[78]: 
  pop state year
one 1.5 Ohio 2000
two 1.7 Ohio 2001
three 3.6 Ohio 2002
four 2.4 Nevada 2001
five 2.9 Nevada 2002

1.2. 用由字典类型组成的嵌套字典类型来生成DataFrame对象

当由嵌套的字典类型生成DataFrame的时候,外部的字典索引会成为列名,内部的字典索引会成为行名。生成的DataFrame会根据行索引排序

In [84]: pop = {'Nevada': {2001: 2.4, 2002: 2.9},'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}

In [85]: frame3 = DataFrame(pop)

In [86]: frame3
Out[86]: 
  Nevada Ohio
2000  NaN 1.5
2001  2.4 1.7
2002  2.9 3.6

除了使用默认的按照行索引排序之外,还可以指定行序列:

In [95]: frame3 = DataFrame(pop,[2002,2001,2000])

In [96]: frame3
Out[96]: 
  Nevada Ohio
2002  2.9 3.6
2001  2.4 1.7
2000  NaN 1.5

1.3 其它构造方法:

浅析pandas 数据结构中的DataFrame

2. DataFrame 内容访问

从DataFrame中获取一列的结果为一个Series,可以通过以下两种方式获取:

# 以字典索引方式获取
In [100]: frame1["state"]
Out[100]: 
one  Ohio
two  Ohio
three  Ohio
four  Nevada
five  Nevada
Name: state, dtype: object
# 以属性方式获取
In [101]: frame1.state
Out[101]: 
one  Ohio
two  Ohio
three  Ohio
four  Nevada
five  Nevada
Name: state, dtype: object

也可以通过ix获取一行数据:

In [109]: frame1.ix["one"] # 或者是 frame1.ix[0]
Out[109]: 
pop  1.5
state Ohio
year  2000
Name: one, dtype: object
# 获取多行数据
In [110]: frame1.ix[["tow","three","four"]]
Out[110]: 
  pop state year
tow NaN  NaN  NaN
three 3.6 Ohio 2002.0
four 2.4 Nevada 2001.0
# 还可以通过默认数字行索引来获取数据
In [111]: frame1.ix[range(3)]
Out[111]: 
  pop state year
one 1.5 Ohio 2000
two 1.7 Ohio 2001
three 3.6 Ohio 2002

获取指定行,指定列的交汇值:

In [119]: frame1["state"]
Out[119]: 
one  Ohio
two  Ohio
three  Ohio
four  Nevada
five  Nevada
Name: state, dtype: object

In [120]: frame1["state"][0]
Out[120]: 'Ohio'

In [121]: frame1["state"]["one"]
Out[121]: 'Ohio'

先指定列再指定行:

In [125]: frame1.ix[0]
Out[125]: 
pop  1.5
state Ohio
year  2000
Name: one, dtype: object

In [126]: frame1.ix[0]["state"]
Out[126]: 'Ohio'

In [127]: frame1.ix["one"]["state"]
Out[127]: 'Ohio'

In [128]: frame1.ix["one"][0]
Out[128]: 1.5

In [129]: frame1.ix[0][0]
Out[129]: 1.5

3. DataFrame 对象的修改

增加一列,并所有赋值为同一个值:

# 增加一列值
In [131]: frame1["debt"] = 10

In [132]: frame1
Out[132]: 
  pop state year debt
one 1.5 Ohio 2000 10
two 1.7 Ohio 2001 10
three 3.6 Ohio 2002 10
four 2.4 Nevada 2001 10
five 2.9 Nevada 2002 10

# 更改一列的值
In [133]: frame1["debt"] = np.arange(5)

In [134]: frame1
Out[134]: 
  pop state year debt
one 1.5 Ohio 2000  0
two 1.7 Ohio 2001  1
three 3.6 Ohio 2002  2
four 2.4 Nevada 2001  3
five 2.9 Nevada 2002  4

追加类型为Series的一列

# 判断是否为东部区
In [137]: east = (frame1.state == "Ohio")

In [138]: east
Out[138]: 
one  True
two  True
three  True
four  False
five  False
Name: state, dtype: bool
# 赋Series值
In [139]: frame1["east"] = east

In [140]: frame1
Out[140]: 
  pop state year debt east
one 1.5 Ohio 2000  0 True
two 1.7 Ohio 2001  1 True
three 3.6 Ohio 2002  2 True
four 2.4 Nevada 2001  3 False
five 2.9 Nevada 2002  4 False

DataFrame 的行可以命名,同时多列也可以命名:

In [145]: frame3.columns.name = "state"

In [146]: frame3.index.name = "year"

In [147]: frame3
Out[147]: 
state Nevada Ohio
year    
2002  2.9 3.6
2001  2.4 1.7
2000  NaN 1.5

总结

以上所述是小编给大家介绍的pandas 数据结构之DataFrame,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python实现apahce网站日志分析示例
Apr 02 Python
将Python中的数据存储到系统本地的简单方法
Apr 11 Python
浅谈python函数之作用域(python3.5)
Oct 27 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
Nov 07 Python
django自带serializers序列化返回指定字段的方法
Aug 21 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
May 15 Python
pytorch 查看cuda 版本方式
Jun 23 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
python中yield的用法详解
Jan 13 Python
全网最详细的PyCharm+Anaconda的安装过程图解
Jan 25 Python
Python排序算法之插入排序及其优化方案详解
Jun 11 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 Python
pandas 缺失值与空值处理的实现方法
Oct 12 #Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 #Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 #Python
Python数据处理篇之Sympy系列(五)---解方程
Oct 12 #Python
详解Python绘图Turtle库
Oct 12 #Python
Python中的list与tuple集合区别解析
Oct 12 #Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
Oct 12 #Python
You might like
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
JavaScript 拖拉缩放效果
2008/12/10 Javascript
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
vue+element表格导出为Excel文件
2019/09/26 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
python使用PyGame模块播放声音的方法
2015/05/20 Python
python安装与使用redis的方法
2016/04/19 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
python实现彩票系统
2020/06/28 Python
django框架使用方法详解
2019/07/18 Python
python:按行读入,排序然后输出的方法
2019/07/20 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
教师党员一句话承诺
2014/03/28 职场文书
党员政治学习材料
2014/05/14 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书