pandas读取Excel、csv文件中的数据时,得到的大多是表格型的二维数据,在pandas中对应的即为DataFrame数据结构。在处理这类数据时,往往要根据据需求先获取数据中的子集,如某些列、某些行、行列交叉的部分等。可以说子集选取是一个非常基础、频繁使用的操作,而DataFrame的子集选取看似简单却有一定复杂性。本文聚焦DataFrame的子集选取操作逻辑,力求在实战中遇到子集选取操作的需求时"不迷路"。


主目录

一、图解DataFrame

DataFrame是一种二维的表格型数据结构,每一行/列都有对应的标签位置序号。行列标签、位置序号的对应关系如下图所示:


图解DataFrame行列标签、位置序号
  • 列标签(也叫列名:columns)
  • 行标签(也叫行索引:index)默认为(0, 1, 2, …, n)。这里与位置序号恰好一致。

针对DataFrame的数据结构,pandas提供了三种获取子集的索引器:[].loc[].iloc[]

  • df[]:快捷的整行整列选取

  • df.loc[]:按标签的行列交叉选取

  • df.iloc[]:按位置序号的行列交叉选取

二、整行整列选取:df[]

df['列标签'],选取单个整列

# 选取“日期”列
df['日期']

df[标签列表],选取多个整列

# 选取“最高温”,“最低温”,“风力风向”三列
df[['最高温','最低温','风力风向']]

df[切片],选取整行

# 选取行索引值1、2、3的整行。切片左闭右开
df[1:4]

切片语法也支持字符串的索引标签值,如将"日期"列修改为行索引(index)

df1 = df.set_index("日期")
# 下面两个切片选取的行是一样的
df1[1:4]  #按位置序号的切片,左闭右开
df1['2021-12-02 周四':'2021-12-04 周六']  # 按行标签的切片,左闭右闭

df[]语法小结:

  • df[]语法中,方括号内输入标签名列表选取的是列;而方括号内输入切片条件选取的是行(条件筛选在下文单独介绍)。
  • df[]输入切片选取整行时,如果是按照位置序号的切片,左闭右开;按行标签的切片,左闭右闭。

三、行列交叉选取

行列交叉选择,可以通过df.loc[]df.iloc[]两个索引器来实现,两者都需要输入两组参数,先行选择,后列选择。行、列选择都可以是单个标签(序号)、列表和切片。根据需求组合使用,威力强大!

df.loc[行选择,列选择]。参数面向的是标签

df.iloc[行位置序号,列位置序号]。参数面向的是位置序号

  • :单个数值,:单个数值
df1.loc['2021-12-05 周日','空气质量指数']
df1.iloc[4,4]

image-20220503121009320
  • :列表,:列表
df1.loc[['2021-12-05 周日','2021-12-07 周二'],['最高温','最低温','风力风向']]
df1.iloc[[4,6],[0,1,3]]

image-20220503121028556
  • :切片,:切片
df1.loc['2021-12-01 周三':'2021-12-03 周五','天气':'空气质量指数']
df1.iloc[:3,2:5]

image-20220503121044354
  • :切片(全选),:列表
df1.loc[:,['最高温','最低温']]
df1.iloc[:,[0,1]]

image-20220503121102550

四、按条件筛选子集

df.[]df.loc[]df.iloc[]除了按照行列的标签和位置序号选取子集,还可以使用条件(布尔表达式)筛选子集。

筛选最高温、最低温

将最高温、最低温处理成数值型:

df1.loc[:,'最高温'] = df1['最高温'].str.replace('°','').astype('float32')
df1.loc[:,'最低温'] = df1['最低温'].str.replace('°','').astype('float32')

温度处理成数值

获取最高温大于10度,最低温小于6度的数据

#  df.[]的写法
df1[(df1['最高温']>10) & (df1['最低温']<6)]
#  df.loc[]的写法
df1.loc[(df1['最高温']>10) & (df1['最低温']<6),:]
# &与、|或、~非
df1.loc[(df1['最高温']>10) & ~(df1['最低温']>=6),:]

基于温度的条件筛选

五、函数筛选子集

# 匿名函数lambda表达式,获取最高温大于10度,最低温小于6度的数据
df1.loc[lambda df : (df['最高温']>10) & (df['最低温']<6)]

获取前9天并且空气质量指数为优

# 自定义函数,返回值是布尔数组
def queryData(df):
    return df.index.str.startswith('2021-12-0') & df['空气质量指数'].str.endswith('优')

df1.loc[queryData , :]

函数查询

小结

在pandast提供的df[]df.loc[]df.iloc[]这个三种索引器,前两个更为常用。df[]在整行或者整列获取时更为方便。整行整列选取可以看作是行列交叉选取的一个特例,故df.loc[]是更为通用的方法,它支持单个标签值、列表多选、切片区间、条件(布尔)表达式、函数调用五种方式索引子集,功能强大。

pandas子集选取的三种方法:[]、.loc[]、.iloc[]的更多相关文章

  1. 三种方法实现PCA算法(Python)

    主成分分析,即Principal Component Analysis(PCA),是多元统计中的重要内容,也广泛应用于机器学习和其它领域.它的主要作用是对高维数据进行降维.PCA把原先的n个特征用数目 ...

  2. Python使用三种方法实现PCA算法[转]

    主成分分析(PCA) vs 多元判别式分析(MDA) PCA和MDA都是线性变换的方法,二者关系密切.在PCA中,我们寻找数据集中最大化方差的成分,在MDA中,我们对类间最大散布的方向更感兴趣. 一句 ...

  3. C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?

    C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...

  4. opencv图像阈值设置的三种方法

    1.简单阈值设置   像素值高于阈值时,给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色).这个函数就是 cv2.threshhold().这个函数的第一个参数就是原图像 ...

  5. Pandas查询数据的几种方法

    Pandas查询数据 Pandas查询数据的几种方法 df.loc方法,根据行.列的标签值查询 df.iloc方法,根据行.列的数字位置查询 df.where方法 df.query方法 .loc既能查 ...

  6. 像画笔一样慢慢画出Path的三种方法(补充第四种)

    今天大家在群里大家非常热闹的讨论像画笔一样慢慢画出Path的这种效果该如何实现. 北京-LGL 博客号@ligl007发起了这个话题.然后各路高手踊跃发表意见.最后雷叔 上海-雷蒙 博客号@雷蒙之星 ...

  7. JAVA之线程同步的三种方法

    最近接触到一个图片加载的项目,其中有声明到的线程池等资源需要在系统中线程共享,所以就去研究了一下线程同步的知识,总结了三种常用的线程同步的方法,特来与大家分享一下.这三种方法分别是:synchroni ...

  8. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

  9. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

随机推荐

  1. SpringBoot集成SpringBootDataElasticSearch

    先放出依赖: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spri ...

  2. 详解 IOC

    什么是IOC: IOC-Inversion Of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是 ...

  3. Centos最小化安装

    1.选择最小安装: 2.选择相应的安装包 老男孩提示: 1.根据经验,选择安装包时应该按最小化原则,即不需要的或者不确定是否需要的就不安装,这样可以最大程度上确保系统安全. 2.如果安装过程落了部分包 ...

  4. 文件缓存tmpfs + 数据缓存SSDB(一)

    一.文件缓存tmpfs 1.特性 1) 基于内存的文件系统,RAW+SWAP,虚拟内存 2) tmpfs使用虚拟内存,/dev/shm/使用共享内存 3) 访问速度快,可以动态调整大小 4) 没有持久 ...

  5. idea中Git的配置和Github上推拉项目

    1.去官网下载Git,并且安装它.安装步骤较为简单,此处就不再赘述. 2.在idea中配置Git信息 Git路径就是你电脑中安装Git的位置,找到git.exe文件(正常情况下,idea都会自动给你匹 ...

  6. 解决引用类型为什么打出的是地址值,又怎么改成输出属性值(toString()底层)

    一丶toString的源码解析: 一丶object的toString的源码解析: 集合中toString源码分析: 小结: 改成输出属性值 在父类中重写toString();方法 快捷键:Alt+In ...

  7. ctfhub web信息泄露备份文件下载(vim缓存 Ds-Store)

    Vim缓存 进入环境由于不懂得vim是什么借鉴大佬的博客 网页提示flag在index.php中我们按着这个思路去找 将文件保存下来因为是swp文件我们用kail进行打开 使用vim -r index ...

  8. 语言算子&模糊推理

    一.语言算子 语言算子分为三类: ①语气算子 ②模糊化算子 ③判定化算子 (1)语气算子 "集中化算子":--"很"."极"."非 ...

  9. 浅谈JavaScript原型与原型链

    对于很多前端开发者而言,JavaScript的原型实在是很让人头疼,所以我这边就整理了一下自己对应原型的一点理解,分享给大家,供交流使用 原型 说起原型,那就不得不说prototype.__proto ...

  10. 从 输入网址(URL)到页面展示的过程

    1.用户输入url网址(URL) 用户输入url(也就是我们说的网址,也是统一资源定义符,用于定义互联网资源) 比如输入https://www.baidu.com 其中https为协议 baidu.c ...