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导出Excel图表以及导出为图片的方法
Nov 07 Python
浅析Python的web.py框架中url的设定方法
Jul 11 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
python实现简单淘宝秒杀功能
May 03 Python
使用python获取邮箱邮件的设置方法
Sep 20 Python
使用python turtle画高达
Jan 19 Python
pygame实现飞机大战
Mar 11 Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
May 22 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 Python
pycharm如何设置官方中文(如何汉化)
Dec 29 Python
python 多态 协议 鸭子类型详解
Nov 27 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和javascript常用正则表达式及用法实例
2014/07/01 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
可以将word转成html的js代码
2010/04/11 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
2013/10/22 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
2020/10/27 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
基于Pandas读取csv文件Error的总结
2018/06/15 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
详解如何从TensorFlow的mnist数据集导出手写体数字图片
2019/08/05 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
python实现单机五子棋
2020/08/28 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
Python类型转换的魔术方法详解
2020/12/23 Python
python中remove函数的踩坑记录
2021/01/04 Python
python中if嵌套命令实例讲解
2021/02/25 Python
农救科工作职责
2013/11/27 职场文书
数控专业推荐信范文
2013/12/02 职场文书
上学迟到的检讨书
2014/01/11 职场文书
幼儿园毕业园长感言
2014/02/24 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
基层党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
教代会闭幕词
2015/01/28 职场文书
学校食堂管理制度
2015/08/04 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
《实心球》教学反思
2016/02/23 职场文书
python playwright 自动等待和断言详解
2021/11/27 Python