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网络编程实例简析
Sep 26 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 Python
Python爬取qq music中的音乐url及批量下载
Mar 23 Python
Python的时间模块datetime详解
Apr 17 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
Python实现读取机器硬件信息的方法示例
Jun 09 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 Python
通过实例了解Python str()和repr()的区别
Jan 17 Python
基于Python的OCR实现示例
Apr 03 Python
Python爬虫JSON及JSONPath运行原理详解
Jun 04 Python
python压包的概念及实例详解
Feb 17 Python
基于python定位棋子位置及识别棋子颜色
Jul 26 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 用checkbox一次性删除多条记录的方法
2010/02/23 PHP
php若干单维数组遍历方法的比较
2011/09/20 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
FLASH 广告之外的链接
2008/12/16 Javascript
jquery CSS选择器笔记
2010/03/29 Javascript
JavaScript打字小游戏代码
2011/12/26 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
在Python的Django框架中包装视图函数
2015/07/20 Python
Python操作Oracle数据库的简单方法和封装类实例
2018/05/07 Python
python 读取文件并替换字段的实例
2018/07/12 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
2018/10/29 Python
python中使用while循环的实例
2019/08/05 Python
Win10+GPU版Pytorch1.1安装的安装步骤
2019/09/27 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
王力宏牛津大学演讲稿
2014/05/22 职场文书
入党综合考察材料
2014/06/02 职场文书
大二学生自我检讨书
2014/10/23 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
搬迁通知
2015/04/20 职场文书
Windows环境下实现批量执行Sql文件
2021/10/05 SQL Server