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 29 Python
使用 Python 实现微信公众号粉丝迁移流程
Jan 03 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
Jun 26 Python
python实现简单flappy bird
Dec 24 Python
使用Python创建简单的HTTP服务器的方法步骤
Apr 26 Python
pytorch 状态字典:state_dict使用详解
Jan 17 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 Python
使用keras实现densenet和Xception的模型融合
May 23 Python
python:HDF和CSV存储优劣对比分析
Jun 08 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
python实现快速文件格式批量转换的方法
Oct 16 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 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函数之子字符串替换 str_replace
2011/03/23 PHP
PHP输出九九乘法表代码实例
2015/03/27 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
javascript合并两个数组最简单的实现方法
2019/09/14 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
python统计一个文本中重复行数的方法
2014/11/19 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
python获取多线程及子线程的返回值
2017/11/15 Python
Windows下安装Scrapy
2018/10/17 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
如何使用Python实现自动化水军评论
2019/06/26 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
Django权限控制的使用
2021/01/07 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
美国在线购物频道:Shop LC
2019/04/21 全球购物
大宝sod蜜广告词
2014/03/21 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
项目经理岗位职责
2015/01/31 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
新学期家长寄语2016
2015/12/03 职场文书
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python
js判断两个数组相等的5种方法
2022/05/06 Javascript