Pandas中Series和DataFrame的索引实现


Posted in Python onJune 27, 2019

正文

在对Series对象和DataFrame对象进行索引的时候要明确这么一个概念:是使用下标进行索引,还是使用关键字进行索引。比如list进行索引的时候使用的是下标,而dict索引的时候使用的是关键字。

使用下标索引的时候下标总是从0开始的,而且索引值总是数字。而使用关键字进行索引,关键字是key里面的值,既可以是数字,也可以是字符串等。

Series对象介绍:

Series对象是由索引index和值values组成的,一个index对应一个value。其中index是pandas中的Index对象。values是numpy中的数组对象。

import pandas as pd
s1 = pd.Series([2,3,4,5], index=['a', 'b', 'c', 'd'])
print(s1)
结果:
a  2
b  3
c  4
d  5
dtype: int64

print(s1.index)
结果:
Index(['a', 'b', 'c', 'd'], dtype='object')

print(s1.values)
结果:
[2 3 4 5]

如何对Series对象进行索引?

1:使用index中的值进行索引

print(s1['a'])
结果:
2

print(s1[['a','d']])
结果:
a  2
d  5
dtype: int64


print(s1['b':'d'])
结果(注意,切片索引保存最后一个值):
b  3
c  4
d  5
dtype: int64

2:使用下标进行索引 

print(s1[0])
结果:
2

print(s1[[0,3]])
结果:
a  2
d  5
dtype: int64

print(s1[1:3])
结果(注意:这里和上面不同的是不保存最后一个值,与正常索引相同):
b  3
c  4
dtype: int64

3:特殊情况:

上面的index为字符串,假如index为数字,这个时候进行索引是按照index值进行还是按照下标进行? 

s1 = pd.Series([2,3,4,5], index=[1,2,3,4])
print(s1[2])
结果:
3
print(s1[0]) 会报错

print(s1[[2,4]])
结果:
2  3
4  5
dtype: int64

print(s1[1:3])
结果:
2  3
3  4
dtype: int64

可以看出来,当index为整数的时候,那么前两种选择是使用index的值进行索引, 而后一种切片选择使用的是下标进行索引。

4:使用布尔Series进行索引

使用布尔Series进行索引的时候,其实是要求布尔Series和我们的索引对象有相同的index。

s1 = pd.Series([2,3,4,5], index=['a', 'b', 'c', 'd']
print(s1 > 3)
结果(这是一个bool Series):
a  False
b  False
c   True
d   True
dtype: bool

print(s1[s1 > 3])
结果(只需要把bool Series 传入Series就可以实现索引):
c  4
d  5
dtype: int64

5:使用Index对象来进行索引

使用Index对象进行索引的时候,和使用值索引没有本质的区别。因为Index里面也存入了很多值,可以把Index看做一个list。

DataFrame对象介绍:

DataFrame对象是一个由行列组成的表。DataFrame中行由columns组成,列由index组成,它们都是Index对象。它的值还是numpy数组。

data = {'name':['ming', 'hong', 'gang', 'tian'], 'age':[12, 13, 14, 20], 'score':[80.3, 88.2, 90, 99.9]}
df1 = pd.DataFrame(data)

print(df1.index)
结果:
RangeIndex(start=0, stop=4, step=1)

print(df1.columns)
结果:
Index(['age', 'name', 'score'], dtype='object')

print(df1.values)
结果:
[[12 'ming' 80.3]
 [13 'hong' 88.2]
 [14 'gang' 90.0]
 [20 'tian' 99.9]]

如何对DataFrame对象进行索引

1:使用columns的值对列进行索引

  直接使用columns中的值进行索引,得到的是一列或者是多列的值

print(df1['name'])
结果:
0  ming
1  hong
2  gang
3  tian
Name: name, dtype: object

print(df1[['name','age']])
结果:
name age
0 ming  12
1 hong  13
2 gang  14
3 tian  20
注意:不可以直接使用下标对列进行索引,除非该columns当中包含该值。如下面的操作是错误的
print(df1[0])
结果: 错误

2:切片或者布尔Series对行进行索引

使用切片索引,或者布尔类型Series进行索引:

print(df1[0:3])
使用切片进行选择,结果:
age name score
0  12 ming  80.3
1  13 hong  88.2
2  14 gang  90.0

print(df1[ df1['age'] > 13 ])
使用布尔类型Series进行索引,其实还是要求布尔Series和DataFrame有相同的index,结果:
age name score
2  14 gang  90.0
3  20 tian  99.9

3:使用loc和iloc进行索引

本质上loc是用index和columns当中的值进行索引,而iloc是不理会index和columns当中的值的,永远都是用从0开始的下标进行索引。所以当你搞懂这句话的时候,下面的索引就会变得非常简单:

print(df1.loc[3])
结果:
name   hong
score  88.2
Name: 3, dtype: object

print(df1.loc[:,'age'])
结果:
1  12
3  13
4  14
5  20
Name: age, dtype: int64

print(df1.iloc[3])
结果:
age    20
name   tian
score  99.9
Name: 5, dtype: object

print(df1.iloc[:,1])
结果:
1  ming
3  hong
4  gang
5  tian
Name: name, dtype: object

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用python BeautifulSoup库抓取58手机维修信息
Nov 21 Python
用Python编程实现语音控制电脑
Apr 01 Python
Python如何判断数独是否合法
Sep 08 Python
python 获取网页编码方式实现代码
Mar 11 Python
Pycharm学习教程(1) 定制外观
May 02 Python
python中 logging的使用详解
Oct 25 Python
python实现画圆功能
Jan 25 Python
python Selenium实现付费音乐批量下载的实现方法
Jan 24 Python
python之当你发现QTimer不能用时的解决方法
Jun 21 Python
Python3 列表,数组,矩阵的相互转换的方法示例
Aug 05 Python
python获取栅格点和面值的实现
Mar 10 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
Python中使用双下划线防止类属性被覆盖问题
Jun 27 #Python
PyTorch的深度学习入门教程之构建神经网络
Jun 27 #Python
PyTorch的深度学习入门之PyTorch安装和配置
Jun 27 #Python
解决pycharm remote deployment 配置的问题
Jun 27 #Python
python turtle库画一个方格和圆实例
Jun 27 #Python
Python实现的对一个数进行因式分解操作示例
Jun 27 #Python
python pytest进阶之xunit fixture详解
Jun 27 #Python
You might like
星际玩家的三大定律
2020/03/04 星际争霸
php操作excel文件 基于phpexcel
2010/07/02 PHP
PHP文章按日期(月日)SQL归档语句
2012/11/29 PHP
php 如何获取数组第一个值
2013/08/06 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
THINKPHP截取中文字符串函数实例代码
2017/03/20 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
原生javascript AJAX 三级联动的实现代码
2018/05/04 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
python实现排序算法
2014/02/14 Python
Python脚本实现集群检测和管理功能
2015/03/06 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
Python基础类继承重写实现原理解析
2020/04/03 Python
Matplotlib配色之Colormap详解
2021/01/05 Python
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
师恩难忘教学反思
2014/04/27 职场文书
模具专业求职信
2014/06/26 职场文书
无房证明范本
2014/09/17 职场文书
毕业论文致谢词
2015/05/14 职场文书
采购部年度工作总结
2015/08/13 职场文书
2016党员党课心得体会
2016/01/07 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python
Java详细解析==和equals的区别
2022/04/07 Java/Android
MySQL数据库 安全管理
2022/05/06 MySQL
利用Apache Common将java对象池化的问题
2022/06/16 Servers