软件应用 | 一文介绍Pandas中的9种数据访问方式
The following article is from 小数志 Author luanhz
本文转载自公众号:小数志
导读
Pandas之于日常数据分析工作的重要地位不言而喻,而灵活的数据访问则是其中的一个重要环节。本文旨在讲清Pandas中的9种数据访问方式,包括范围读取和条件查询等。
DataFrame是一个行列均由多个Series组成的二维数据表框,其中Series可看做是一个一维向量。理解这一点很重要,因为如果把DataFrame看做是一个集合类型的话,那么这个集合的元素泛型即为Series; DataFrame可看做是一个二维嵌套的dict,其中第一层dict的key是各个列名;而每个dict内部则是一个以各行索引为key的子dict。当然,这里只是将其"看做"而非等价,是因为其与一个严格的dict还是有很大区别的,一个很重要的形式上区别在于:DataFrame的列名是可以重复的,而dict的key则是不可重复的。
认识了这两点,那么就很容易理解DataFrame中数据访问的若干方法,比如:
当在[]中提供单值或多值(多个列名组成的列表)访问时按列进行查询,单值访问不存在列名歧义时还可直接用属性符号" . "访问
切片形式访问时按行进行查询,又区分数字切片和标签切片两种情况:当输入数字索引切片时,类似于普通列表切片;当输入标签切片时,执行范围查询(即无需切片首末值存在于标签列中),包含两端标签结果,无匹配行时返回为空,但要求标签切片类型与索引类型一致。例如,当标签列类型(可通过df.index.dtype查看)为时间类型时,若使用无法隐式转换为时间的字符串作为索引切片,则引发报错
切片形式返回行查询,且为范围查询
切片类型与索引列类型不一致时,引发报错
7. filter,说完where和query,其实还有一个表面上很类似的查询功能,那就是filter。在Spark中,filter是where的别名算子,即二者实现相同功能;但在pandas的DataFrame中却远非如此。在DataFrame中,filter是用来读取特定的行或列,并支持三种形式的筛选:固定列名(items)、正则表达式(regex)以及模糊查询(like),并通过axis参数来控制是行方向或列方向的查询。这里给出其文档简介,很容易理解其功能:
最后,pandas中提供了非常灵活多样的数据访问形式,可以说是兼顾了嵌套Series和嵌套dict的双重特性,但最为常用的其实还是[]、loc和iloc这几种方法,而对于where、query、isin等在某些情况下也会非常高效,但对于filter、get、lookup以及at/iat等其实则并不常用。
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
推荐 | 马纯菲
欢迎扫描👇二维码添加关注