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的Twisted框架编写简单的网络客户端
Apr 16 Python
在Django的通用视图中处理Context的方法
Jul 21 Python
简单解决Python文件中文编码问题
Nov 22 Python
两个命令把 Vim 打造成 Python IDE的方法
Mar 20 Python
Python字典,函数,全局变量代码解析
Dec 18 Python
PyTorch基本数据类型(一)
May 22 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
python实现飞机大战项目
Mar 11 Python
详解anaconda安装步骤
Nov 23 Python
Python实现Appium端口检测与释放的实现
Dec 31 Python
深入理解python多线程编程
Apr 18 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
php中常用的预定义变量小结
2012/05/09 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
php旋转图片90度的方法
2013/11/07 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
分享两款带遮罩的jQuery弹出框
2015/12/30 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
Angular 常用指令实例总结整理
2016/12/13 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
Bootstrap Table使用整理(三)
2017/06/09 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
详解elementUI中input框无法输入的问题
2020/04/27 Javascript
JS面向对象实现飞机大战
2020/08/26 Javascript
Ant Design Pro 之 ProTable使用操作
2020/10/31 Javascript
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
python 实现屏幕录制示例
2019/12/23 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
世界上最大的折扣香水店:FragranceNet.com
2016/10/26 全球购物
水电工岗位职责
2014/02/12 职场文书
大学新生军训自我鉴定
2014/03/18 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
通过shell脚本对mysql的增删改查及my.cnf的配置
2021/07/07 MySQL
Django模型层实现多表关系创建和多表操作
2021/07/21 Python
基于Redission的分布式锁实战
2022/08/14 Redis