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 相关文章推荐
启动targetcli时遇到错误解决办法
Oct 26 Python
Python探索之ModelForm代码详解
Oct 26 Python
python3爬取各类天气信息
Feb 24 Python
python opencv设置摄像头分辨率以及各个参数的方法
Apr 02 Python
python 正确保留多位小数的实例
Jul 16 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
Python集中化管理平台Ansible介绍与YAML简介
Jun 12 Python
使用TensorFlow实现简单线性回归模型
Jul 19 Python
浅谈Python中(&,|)和(and,or)之间的区别
Aug 07 Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 Python
Python偏函数Partial function使用方法实例详解
Jun 17 Python
python中threading和queue库实现多线程编程
Feb 06 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+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
vue实现图片上传功能
2020/05/28 Javascript
echarts实现获取datazoom的起始值(包括x轴和y轴)
2020/07/20 Javascript
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
Python实现多进程共享数据的方法分析
2017/12/04 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
PyTorch中的Variable变量详解
2020/01/07 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
腾讯技术类校园招聘笔试试题
2014/05/06 面试题
为数据库创建索引都需要注意些什么
2012/07/17 面试题
电气专业应届生求职信
2013/11/01 职场文书
会计专业自荐信范文
2013/12/02 职场文书
农村婚礼证婚词
2014/01/10 职场文书
文明学生事迹材料
2014/01/29 职场文书
授权委托书格式模板
2014/04/03 职场文书
公司委托书格式
2014/08/01 职场文书
暑期学习心得体会
2014/09/02 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
Python学习之os包使用教程详解
2022/03/21 Python