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 相关文章推荐
matplotlib中legend位置调整解析
Dec 19 Python
Python加载带有注释的Json文件实例
May 23 Python
python 找出list中最大或者最小几个数的索引方法
Oct 30 Python
python读取目录下最新的文件夹方法
Dec 24 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
pthon贪吃蛇游戏详细代码
Jan 27 Python
Python常见的pandas用法demo示例
Mar 16 Python
python机器人运动范围问题的解答
Apr 29 Python
python如何删除文件中重复的字段
Jul 16 Python
python模式 工厂模式原理及实例详解
Feb 11 Python
Python进行统计建模
Aug 10 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
Windows下安装Memcached的步骤说明
2010/04/25 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
微信小程序实现弹出菜单功能
2018/06/12 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
Python3.2中Print函数用法实例详解
2015/05/19 Python
Python中max函数用法实例分析
2015/07/17 Python
机器学习python实战之决策树
2017/11/01 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
python爬虫基本知识
2018/03/05 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
python pyenv多版本管理工具的使用
2019/12/23 Python
Python新手学习函数默认参数设置
2020/06/03 Python
python 模拟登陆github的示例
2020/12/04 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
惠而浦美国官网:Whirlpool.com
2021/01/19 全球购物
师范大学应届生求职信
2013/11/21 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技