Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >pandas | 如何在DataFrame中通过索引高效获取数据?

pandas | 如何在DataFrame中通过索引高效获取数据?

作者头像
TechFlow-承志
发布于 2020-07-10 10:06:55
发布于 2020-07-10 10:06:55
14.1K00
代码可运行
举报
文章被收录于专栏:TechFlowTechFlow
运行总次数:0
代码可运行

今天是pandas数据处理专题第三篇文章,我们来聊聊DataFrame中的索引。

上篇文章当中我们简单介绍了一下DataFrame这个数据结构的一些常见的用法,从整体上大概了解了一下这个数据结构。今天这一篇我们将会深入其中索引相关的应用方法,了解一下DataFrame的索引机制和使用方法。

数据准备

上一篇文章当中我们了解了DataFrame可以看成是一系列Series组合的dict,所以我们想要查询表中的某一列,也就是查询某一个Series,我们只需要像是dict一样传入key值就可以查找了。但是,如果我们想要查找某一行应该怎么办?难道手动去遍历每一列么?这显然是不现实的。

所以DataFrame当中也为我们封装了现成的行索引的方法,行索引的方法一共有两个,分别是loc,iloc。这两种方法都可以查询某一行,只是查询的参数不同,本质上没有高下之分,大家可以自由选择。

首先,我们还是用上次的方法来创建一个DataFrame用来测试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data = {'name': ['Bob', 'Alice', 'Cindy', 'Justin', 'Jack'], 'score': [199, 299, 322, 212, 311], 'gender': ['M', 'F', 'F', 'M', 'M']}

df = pd.DataFrame(data)

loc

首先我们来介绍loc,loc方法可以根据传入的行索引查找对应的行数据。注意,这里说的是行索引,而不是行号,它们之间是有区分的。行索引其实对应于Series当中的Index,也就是对应Series中的索引。所以我们一般把行索引称为Index,而把列索引称为columns。

我们在之前的文章当中了解过,对于Series来说,它的Index可以不必是整数,也可以拥有重复元素。当然如果我们不指定的话,它会和行号一样,都是整数:

我们可以手动修改df的index,来看看当行索引不是整数的时候,是不是也一样生效。

可以明显看出来是生效的,而且我们也可以传入一个索引数组来查询多行

不仅如此,loc方法也是支持切片的,也就是说虽然我们传进的是一个字符串,但是它在原数据当中是对应了一个位置的。我们使用切片,pandas会自动替我们完成索引对应位置的映射。

但是索引对应的切片出来的结果是闭区间,这一点和Python通常的切片用法不同,需要当心。

另外,loc是支持二维索引的,也就是说我们不但可以指定行索引,还可以在此基础上指定列。说白了我们可以选择我们想要的行中的字段。

列索引也可以切片,并且可以组合在一起切片:

iloc

iloc从名字上来看就知道用法应该和loc不会差太大,实际上也的确如此。iloc的用法几乎和loc完全一样,唯一不同的是,iloc接收的不是index索引而是行号。我们可以通过行号来查找我们想要的行,既然是行号,也就说明了固定死了我们传入的参数必须是整数。

同样iloc也支持传入多个行号。

iloc也支持二维索引,但是对于列,我们也必须传入整数,也就是这个列对应的列号。

和loc不同,iloc的切片也是左闭右开。

我们在使用当中往往会觉得不方便,因为我们往往是知道我们需要的行号和列名。也就是知道一个索引知道一个位置,而不是两个位置或者是两个索引,所以使用loc也不方便使用iloc也不方便。这个时候可以取巧,我们可以通过iloc找出对应的行之后,再通过列索引的方式去查询列

这里我们在iloc之后又加了一个方括号,这其实不是固定的用法,而是两个语句。先是iloc查询行之后,再对这些行组成的新的DataFrame进行列索引。

但如果是通过索引来查找对应的若干行的话,其实也可以不用使用iloc,我们可以直接在df后面加上方括号来查询,一样可以得到结果。

但是这种方式有一个限制,就是后面只能传入一个切片,而不能是一个整数。比如我想要单独查询第2行,我们通过df[2]来查询是会报错的。因为pandas会混淆不知道我们究竟是想要查询一列还是一行,所以这个时候只能通过iloc或者是loc进行。

逻辑表达式

和numpy一样,DataFrame也支持传入一个逻辑表达式作为查询条件

比如我们想要查询分数大于200的行,可以直接在方框中写入查询条件df['score'] > 200。

实际上我们知道df['score']可以获得这一列对应的Series,加上了判断之后,得到的结果应该是一个Bool型的Series。所以如果我们直接传入一个bool型的数组也是一样可以完成查询的:

如果表达式有多个也没问题,不过需要使用括号将表达式包起来,并且多个表达式之间用位运算符连接,比如&, |。

总结

今天主要介绍了loc、iloc和逻辑索引在pandas当中的用法,这也是pandas数据查询最常用的方法,也是我们使用过程当中必然会用到的内容。建议大家都能深刻理解,把它记牢。

很多人在学习pandas的前期遇到最多的一个问题就是会把iloc和loc记混淆,搞不清楚哪个是索引查询哪个是行号查询。曾经原本还有一个ix方法,可以兼顾iloc和loc的功能,既可以索引查询也可以行号查询。但是可惜的是,在pandas最新的版本当中这个方法已经被废弃了。我个人也没有什么太好的办法,只能熟能生巧了,多用几次就记住了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Pandas_Study01
series 和 dataframe 这是pandas 中最为基本的两个概念,series 类似于一维数组,可以近似当成普通的数组进行操作,对于series 默认会有行索引为它索引,但特殊的同时与普通的一维数组不同 列表只能有从0开始的整数索引,而series则可以自定义标签索引,这一点来看,跟字典又比较相似,因此series又可以拥有类似字典的操作方式,series 的标签索引可以随时更新修改替换。series 提供有很多方便的方法,用于判断值为空的 isnull, notnull,sort_index(), sort_values() 用于排序的方法等。
Echo_Wish
2023/11/30
2910
pandas学习-索引-task13
表的列索引 列索引是最常见的索引形式,一般通过 [] 来实现。通过 [列名] 可以从 DataFrame 中取出相应的列,返回值为 Series ,例如从表中取出姓名一列:
用户7886150
2020/12/26
9610
数据分析利器 pandas 系列教程(二):强大的 DataFrame
dataframe 是表格型的数据结构,由一组有序的列组成,可以看成是由 Series 组成的字典,举个例子:
月小水长
2020/02/25
1.2K0
【数据处理包Pandas】DataFrame数据的基本操作
查询一行数据时既可以使用loc索引器(标签索引器),也可以使用iloc位置索引器。查询单行的结果是一个 Series 对象。
Francek Chen
2025/01/22
1440
【数据处理包Pandas】DataFrame数据的基本操作
DataFrame和Series的使用
可以把DataFrame看作由Series对象组成的字典,其中key是列名,值是Series Series和Python中的列表非常相似,但是它的每个元素的数据类型必须相同
@小森
2024/03/15
1910
DataFrame和Series的使用
小蛇学python(8)pandas库之DataFrame
有数据的地方就有表格。无论是异常值处理,清除缺省值,还是增删改查,无论是csv还是mysql等各种数据库,无不是以表格的形式存储数据。表格在数据中成为了一个绕不开的话题,因此专门处理数据的pandas库中出现DataFrame也就不显得奇怪了。
用户2145057
2018/09/12
1.2K0
小蛇学python(8)pandas库之DataFrame
Pandas-3. DataFrame
Series组成的字典可以作为参数来创建DataFrame。其索引是所有Series的索引的并集。 例子:
悠扬前奏
2019/05/28
1.3K0
Pandas
Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。经过多年不懈的努力,Pandas 离这个目标已经越来越近了。
爱编程的小明
2022/09/05
9.3K0
Pandas
【Pandas教程】像写SQL一样用Pandas~
Python在数据分析领域有三个必须需要熟悉的库,分别是pandas,numpy和matplotlib,如果排个优先级的话,我推荐先学pandas。
Awesome_Tang
2019/06/17
2.3K0
python数据科学系列:pandas入门详细教程
前2篇分别系统性介绍了numpy和matplotlib的入门基本知识,今天本文自然是要对pandas进行入门详细介绍,通过本文你将系统性了解pandas为何会有数据分析界"瑞士军刀"的盛誉。
luanhz
2020/05/14
16.6K0
pandas数据清洗,排序,索引设置,数据选取
df.isnull() df的空值为True df.notnull() df的非空值为True
李智
2018/08/03
3.3K0
一文介绍Pandas中的9种数据访问方式
Pandas之于日常数据分析工作的重要地位不言而喻,而灵活的数据访问则是其中的一个重要环节。本文旨在讲清Pandas中的9种数据访问方式,包括范围读取和条件查询等。
luanhz
2021/07/23
3.9K0
一文介绍Pandas中的9种数据访问方式
3. Pandas系列 - DataFrame操作
概览 pandas.DataFrame 创建DataFrame 列表 字典 系列(Series) 列选择 列添加 列删除 pop/del 行选择,添加和删除 标签选择 loc 按整数位置选择 iloc 行切片 附加行 append 删除行 drop 数据帧(DataFrame)是二维数据结构,即数据以行和列的表格方式排列 数据帧(DataFrame)的功能特点: 潜在的列是不同的类型 大小可变 标记轴(行和列) 可以对行和列执行算术运算 pandas.DataFrame 构造函数: pandas.Data
Python编程爱好者
2020/09/08
4K0
3. Pandas系列 - DataFrame操作
数据分析工具Pandas1.什么是Pandas?2.Pandas的数据结构SeriesDataFrame3.Pandas的索引操作索引对象IndexSeries索引DataFrame索引高级索引:标签
Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建,提供了 高级数据结构 和 数据操作工具,它是使Python成为强大而高效的数据分析环境的重要因素之一。
Python攻城狮
2018/08/23
4K0
数据分析工具Pandas1.什么是Pandas?2.Pandas的数据结构SeriesDataFrame3.Pandas的索引操作索引对象IndexSeries索引DataFrame索引高级索引:标签
访问和提取DataFrame中的元素
访问元素和提取子集是数据框的基本操作,在pandas中,提供了多种方式。对于一个数据框而言,既有从0开始的整数下标索引,也有行列的标签索引
生信修炼手册
2020/06/24
4.6K0
盘点66个Pandas函数,轻松搞定“数据清洗”!
之前黄同学曾经总结过一些Pandas函数,主要是针对字符串进行一系列的操作。在此基础上我又扩展了几倍,全文较长,建议先收藏。
朱小五
2022/04/11
3.9K0
盘点66个Pandas函数,轻松搞定“数据清洗”!
Pandas从入门到放弃
Pandas是Panel data(面板数据)和Data analysis(数据分析)的缩写,是基于NumPy的一种工具,故性能更加强劲。Pandas在管理结构数据方面非常方便,其基本功能可以大致概括为一下5类:
愷龍
2024/08/13
2120
Pandas从入门到放弃
Pandas vs Spark:获取指定列的N种方式
本篇继续Pandas与Spark常用操作对比系列,针对常用到的获取指定列的多种实现做以对比。
luanhz
2021/04/12
11.6K0
数据处理利器pandas入门
想入门 Pandas,那么首先需要了解Pandas中的数据结构。因为Pandas中数据操作依赖于数据结构对象。Pandas中最常用的数据结构是 Series 和 DataFrame。这里可以将 Series和 DataFrame分别看作一维数组和二维数组。
MeteoAI
2019/07/24
3.8K0
Pandas最详细教程来了!
导读:在Python中,进行数据分析的一个主要工具就是Pandas。Pandas是Wes McKinney在大型对冲基金AQR公司工作时开发的,后来该工具开源了,主要由社区进行维护和更新。
IT阅读排行榜
2021/04/20
3.3K0
Pandas最详细教程来了!
相关推荐
Pandas_Study01
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验