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抓取豆瓣图片并自动保存示例学习
Jan 10 Python
分析Python的Django框架的运行方式及处理流程
Apr 08 Python
深入理解python中的闭包和装饰器
Jun 12 Python
python实现可以断点续传和并发的ftp程序
Sep 13 Python
Python入门之三角函数全解【收藏】
Nov 08 Python
Python基于TCP实现会聊天的小机器人功能示例
Apr 09 Python
python中正则表达式 re.findall 用法
Oct 23 Python
Mac下Anaconda的安装和使用教程
Nov 29 Python
python按键按住不放持续响应的实例代码
Jul 17 Python
简单了解python元组tuple相关原理
Dec 02 Python
python with (as)语句实例详解
Feb 04 Python
Python中实现输入一个整数的案例
May 03 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下使用iconv需要注意的问题
2010/11/20 PHP
php类的定义与继承用法实例
2015/07/07 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
2016/09/14 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
python类装饰器用法实例
2015/06/04 Python
Python中的一些陷阱与技巧小结
2015/07/10 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
梅西百货官网:Macy’s
2020/08/04 全球购物
什么是网络协议
2016/04/07 面试题
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
认错检讨书
2014/10/02 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript
使用kubeadm命令行工具创建kubernetes集群
2022/03/31 Servers
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL