专栏首页小数志一文介绍Pandas中的9种数据访问方式

一文介绍Pandas中的9种数据访问方式

导读

Pandas之于日常数据分析工作的重要地位不言而喻,而灵活的数据访问则是其中的一个重要环节。本文旨在讲清Pandas中的9种数据访问方式,包括范围读取和条件查询等。

Pandas中的核心数据结构是DataFrame,所以在讲解数据访问前有必要充分认清和深刻理解DataFrame这种数据结构。以下面经典的titanic数据集为例,可以从两个方面特性来认识DataFrame:

  1. DataFrame是一个行列均由多个Series组成的二维数据表框,其中Series可看做是一个一维向量。理解这一点很重要,因为如果把DataFrame看做是一个集合类型的话,那么这个集合的元素泛型即为Series;
  2. DataFrame可看做是一个二维嵌套的dict,其中第一层dict的key是各个列名;而每个dict内部则是一个以各行索引为key的子dict。当然,这里只是将其"看做"而非等价,是因为其与一个严格的dict还是有很大区别的,一个很重要的形式上区别在于:DataFrame的列名是可以重复的,而dict的key则是不可重复的。

认识了这两点,那么就很容易理解DataFrame中数据访问的若干方法,比如:

1. [ ],这是一种最常用的数据访问方式,某种意义上沿袭了Python中的语法糖特色。通常情况下,[]常用于在DataFrame中获取单列、多列或多行信息。具体而言:

  • 当在[]中提供单值或多值(多个列名组成的列表)访问时按列进行查询,单值访问不存在列名歧义时还可直接用属性符号" . "访问
  • 切片形式访问时按行进行查询,又区分数字切片和标签切片两种情况:当输入数字索引切片时,类似于普通列表切片;当输入标签切片时,执行范围查询(即无需切片首末值存在于标签列中),包含两端标签结果,无匹配行时返回为空,但要求标签切片类型与索引类型一致。例如,当标签列类型(可通过df.index.dtype查看)为时间类型时,若使用无法隐式转换为时间的字符串作为索引切片,则引发报错

切片形式返回行查询,且为范围查询

切片类型与索引列类型不一致时,引发报错

2. loc/iloc,可能是除[]之外最为常用的两种数据访问方法,其中loc按标签值(列名和行索引取值)访问、iloc按数字索引访问,均支持单值访问或切片查询。与[ ]访问类似,loc按标签访问时也是执行范围查询,包含两端结果。

3. at/iat,其实是可看分别做为loc和iloc的一种特殊形式,只不过不支持切片访问,仅可用于单值提取,即指定单个标签值或单个索引值进行访问,一般返回标量结果,除非标签值存在重复。

4. isin,条件范围查询,一般是对某一列判断其取值是否在某个可迭代的集合中。即根据特定列值是否存在于指定列表返回相应的结果。

5. where,妥妥的Pandas仿照SQL中实现的算子命名。不过这个命名其实是非常直观且好用的,如果熟悉Spark则会自然联想到在Spark中其实数据过滤主要就是用给的where算子。这里仍然是执行条件查询,但与直观不大相符的是这里会返回全部结果,只是将不满足匹配条件的结果赋值为NaN或其他指定值,可用于筛选或屏蔽值

6. query,提到query,还得多说两句。前面受where容易使人联想到SQL,其实提到query让人想到的仍然是SQL,因为SQL=Structed Query Language,所以query用在DataFrame中其实是提供了一种以类SQL语法执行数据访问的方式,这对熟悉SQL的使用者来说非常有帮助!尤其是在执行链式查询时,例如可参考历史推文:Pandas用了一年,这3个函数是我的最爱……。当然,这种用法一般都可用常规的条件查询替代。

7. filter,说完where和query,其实还有一个表面上很类似的查询功能,那就是filter。在Spark中,filter是where的别名算子,即二者实现相同功能;但在pandas的DataFrame中却远非如此。在DataFrame中,filter是用来读取特定的行或列,并支持三种形式的筛选:固定列名(items)、正则表达式(regex)以及模糊查询(like),并通过axis参数来控制是行方向或列方向的查询。这里给出其文档简介,很容易理解其功能:

8. get。由于DataFrame可看做是嵌套dict结构,所以也提供了类似字典中的get()方法,主要适用于不确定数据结构中是否包含该标签时,与字典的get方法非常类似:

9. lookup。如果说提到query自然联想到SQL,那么提到lookup自然会想到的就是Excel了。实际上,DataFrame中的lookup执行的功能与Excel中的lookup函数差距还是挺大的,初学之时颇有一种挂羊头卖狗肉的感觉。实际上,这里的lookup可看做是loc的一种特殊形式,即分别传入一组行标签和列标签,lookup解析成一组行列坐标,返回相应结果:

最后,pandas中提供了非常灵活多样的数据访问形式,可以说是兼顾了嵌套Series和嵌套dict的双重特性,但最为常用的其实还是[]、loc和iloc这几种方法,而对于where、query、isin等在某些情况下也会非常高效,但对于filter、get、lookup以及at/iat等其实则并不常用。

本文分享自微信公众号 - 小数志(Datazhi),作者:luanhz

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python 数据分析工具包 pandas(一)

    pandas 是专为 python 编程语言设计的高性能,简单易用的数据结构和数据分析工具库,它建立在 numpy 之上,可以许多第三方库完美集成在同一个科学计...

    我是一条小青蛇
  • 介绍一种非常好用汇总数据的方式GROUPING SETS

    介绍   对于任何人而言,用T-SQL语句来写聚会查询都是工作中重要的一环。我们大家也都很熟悉GROUP BY子句来实现聚合表达式,但是如果打算在一个结果集中包...

    用户1217611
  • 极简Python:数据分析与机器学习最小化知识库

    我们正处于一个数据科技(Data Technology,DT)时代。在这个时代,我们的一举一动都能在数据空间留下电子印记,于是海量的社交、电商、科研大数据扑面而...

    用户1682855
  • 图解pandas模块21个常用操作

    Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Py...

    超哥的杂货铺
  • pandas dataframe 时间字段 diff 函数

    pandas 是数据处理的利器,非常方便进行表格数据处理,用过的人应该都很清楚,没接触的可以自行查阅pandas 官网。

    魏守峰
  • pandas dataframe 时间字段 diff 函数

    pandas 是数据处理的利器,非常方便进行表格数据处理,用过的人应该都很清楚,没接触的可以自行查阅pandas 官网。

    魏守峰
  • 《爱上潘大师》系列-与Series的初次相见

    当然,小一我也是潘大师的忠实粉丝,在MB级别的数据处理中也全靠潘大师才能够苟活到现在。

    小一不二三
  • 《利用Python进行数据分析·第2版》第6章 数据加载、存储与文件格式6.1 读写文本格式的数据6.2 二进制数据格式6.3 Web APIs交互6.4 数据库交互6.5 总结

    访问数据是使用本书所介绍的这些工具的第一步。我会着重介绍pandas的数据输入与输出,虽然别的库中也有不少以此为目的的工具。 输入输出通常可以划分为几个大类:读...

    SeanCheney
  • Pandas 实践手册(一)

    本系列参考自「Python Data Science Handbook」第三章,旨在对 Pandas 库的使用方法进行归纳与总结。

    口仆
  • python数据分析万字干货!一个数据集全方位解读pandas

    说到python与数据分析,那肯定少不了pandas的身影,本文希望通过分析经典的NBA数据集来系统的全方位讲解pandas包,建议搭配IDE一遍敲一边读哦。话...

    TechFlow-承志
  • Github标星2.3k+!这个仓库提供了靠谱的入门人工智能的路线及资料!

    Github上有一个仓库(标星2300+),很大程度上解决了这个问题,不但提供了学习路线,为初学者指明了学习的方向,而且所有代码和数据集都提供了下载方式。

    黄博的机器学习圈子
  • Pandas处理时间序列数据的20个关键知识点

    时间序列数据有许多定义,它们以不同的方式表示相同的含义。一个简单的定义是时间序列数据包括附加到顺序时间点的数据点。

    deephub
  • 资源 | 23种Pandas核心操作,你需要过一遍吗?

    Pandas 是基于 NumPy 构建的库,在数据处理方面可以把它理解为 NumPy 加强版,同时 Pandas 也是一项开源项目。它基于 Cython,因此读...

    机器之心
  • 资源 | 23种Pandas核心操作,你需要过一遍吗?

    Pandas 是基于 NumPy 构建的库,在数据处理方面可以把它理解为 NumPy 加强版,同时 Pandas 也是一项开源项目。它基于 Cython,因此读...

    CDA数据分析师
  • 资源 | 23种Pandas核心操作,你需要过一遍吗?

    Pandas 是基于 NumPy 构建的库,在数据处理方面可以把它理解为 NumPy 加强版,同时 Pandas 也是一项开源项目。它基于 Cython,因此读...

    昱良
  • Python开发之Pandas的使用

    ==值得注意的是,drop函数不会修改原数据,如果想直接对原数据进行修改的话,可以选择添加参数inplace = True或用原变量名重新赋值替换。==

    MiChong
  • SQL、Pandas和Spark:常用数据查询操作对比

    当今信息时代,数据堪称是最宝贵的资源。沿承系列文章,本文对SQL、Pandas和Spark这3个常用的数据处理工具进行对比,主要围绕数据查询的主要操作展开。

    luanhz
  • 数据处理 | 在学这几个pandas函数,继续加快你数据处理的速度

    上次我们介绍了几个pandas函数,如nlargest()、pct_change()和explode(),《学会这些好用的pandas函数,让你的数据处理更快人...

    DataCharm
  • 首发:适合初学者入门人工智能的路线及资料下载

    我曾经写了一篇初学者入门的文章:《机器学习简易入门-附推荐学习资料》,这篇文章给初学者指明了学习的方向,受到广大初学者好评。

    kbsc13

扫码关注云+社区

领取腾讯云代金券