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中__new__与__init__方法的区别详解
May 04 Python
详解Python中find()方法的使用
May 18 Python
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 Python
python根据list重命名文件夹里的所有文件实例
Oct 25 Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
django 中的聚合函数,分组函数,F 查询,Q查询
Jul 25 Python
简单了解django orm中介模型
Jul 30 Python
如何通过Python3和ssl实现加密通信功能
May 09 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
使用PyCharm官方中文语言包汉化PyCharm
Nov 18 Python
python实现不同数据库间数据同步功能
Feb 25 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版(1)
2006/10/09 PHP
PHP DataGrid 实现代码
2009/08/12 PHP
php学习之数据类型之间的转换代码
2011/05/29 PHP
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
PHP使用redis实现统计缓存mysql压力的方法
2015/11/14 PHP
javascript 类型判断代码分析
2010/03/28 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
2016/01/18 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
原生js简单实现放大镜特效
2017/05/16 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
Python装饰器的执行过程实例分析
2018/06/04 Python
Python数据类型之Tuple元组实例详解
2019/05/08 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
护士实习自我鉴定
2013/10/22 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
Go归并排序算法的实现方法
2022/04/06 Golang
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS