100天精通Python(数据分析篇)——第69天:Pandas常用数据筛选方法(between、isin、loc、iloc)

news2024/12/23 2:16:14

在这里插入图片描述

文章目录

  • 每篇前言
  • 一、布尔索引
  • 二、between()
  • 三、isin()
    • 1. 单列筛选
    • 2. 多列筛选
    • 3. 通过字典的形式传递多个条件
    • 4. 删除异常值所在行
    • 5. isnotin实现
  • 四、loc、iloc(重要)
    • 0. 创建DataFrame
    • 1. 提取行数据
    • 2. 提取列数据
    • 3. 提取多列数据
    • 4. 提取指定行、指定列数据
    • 5. 提取所有数据
    • 6. 提取指定数据行

每篇前言

  • 🏆🏆作者介绍:Python领域优质创作者、华为云享专家、阿里云专家博主、2021年CSDN博客新星Top6

  • 🔥🔥本文已收录于Python全栈系列专栏:《100天精通Python从入门到就业》
  • 📝​📝​此专栏文章是专门针对Python零基础小白所准备的一套完整教学,从0到100的不断进阶深入的学习,各知识点环环相扣
  • 🎉🎉订阅专栏后续可以阅读Python从入门到就业100篇文章还可私聊进两百人Python全栈交流群(手把手教学,问题解答); 进群可领取80GPython全栈教程视频 + 300本计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
  • 🚀🚀加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!

在这里插入图片描述
在这里插入图片描述

在数据分析清洗数据过程中,可能需要会滤掉、删除DataFrame中一些行,本文将介绍常用的筛选方法。

一、布尔索引

布尔索引可以用于判断和筛选

>>> import pandas as pd
>>> import numpy as np
>>>
>>> df = pd.DataFrame(np.random.randn(3, 3), columns=['A', 'B', 'C'])
>>> print(df)
          A         B         C
0 -0.595510 -1.349175 -0.313918
1  1.130604 -2.094348 -0.449182
2  1.745407 -0.136642 -0.943479
>>>
>>> # 布尔索引判断:A列大于1的数
>>> print(df['A'] > 1)
0    False
1     True
2     True
Name: A, dtype: bool
>>>
>>> # 布尔索引筛选:A列中大于1的行
>>> print(df[df['A'] > 1])
          A         B         C
1  1.130604 -2.094348 -0.449182
2  1.745407 -0.136642 -0.943479

二、between()

between(left,right),筛选指定区间的行

>>> import pandas as pd
>>>
>>> data = {'name': ['小红', '小明', '小白', '小黑'], 'age': [10, 20, 30, 25]}
>>> df = pd.DataFrame(data)
>>> print(df)
  name  age
0   小红   10
1   小明   20
2   小白   30
3   小黑   25
>>>
>>> # 判断年龄是否在20-30之间
>>> print(df['age'].between(20, 30))
0    False
1     True
2     True
3     True
Name: age, dtype: bool
>>> # 筛选年龄在20-30之间的行
>>> print(df[df['age'].between(20, 30)])
  name  age
1   小明   20
2   小白   30
3   小黑   25

三、isin()

isin()接收一个列表,可以同时判断数据是否与多个值相等,若与其中的某个值相等则返回True,否则则为False

创建DataFrame:

>>> import pandas as pd
>>> import numpy as np
>>>
>>> data = [['foo', 'one', 'small', 1], ['foo', 'one', 'large', 5],
...         ['bar', 'one', 'small', 10], ['bar', 'two', 'samll', 10],
...         ['bar', 'two', 'large', 50]]
>>> df = pd.DataFrame(data, columns=['A', 'B', 'C', 'D'])
>>> print(df)
     A    B      C   D
0  foo  one  small   1
1  foo  one  large   5
2  bar  one  small  10
3  bar  two  samll  10
4  bar  two  large  50

1. 单列筛选

df[df[列名].isin([异常值])]

>>> # 1. 接收一个值:判断A列中的值是否为foo
>>> df['A'].isin(['foo'])
0     True
1     True
2    False
3    False
4    False
Name: A, dtype: bool
>>>
>>> # 2. 接收多个值:判断A列中的值是否为foo,bar
>>> df['A'].isin(['foo','bar'])
0    True
1    True
2    True
3    True
4    True
Name: A, dtype: bool

2. 多列筛选

同时满足用&连接,或的话用 | 连接

  • 筛选出每列都有异常值的行:df[df[列名].isin([异常值])& df[列名].isin([异常值])]

    >>> # 筛选中A列中等于bar,并且B列中等于one的行
    >>> df[df['A'].isin(['bar'])& df['B'].isin(['one'])]
         A    B      C   D
    2  bar  one  small  10
    
  • 筛选出至少有一列有异常值的行:df[df[列名].isin([异常值])| df[列名].isin([异常值])]

    >>> # 筛选中A列中等于bar,或者B列中等于one的行
    >>> df[df['A'].isin(['bar']) | df['B'].isin(['one'])]
         A    B      C   D
    0  foo  one  small   1
    1  foo  one  large   5
    2  bar  one  small  10
    3  bar  two  samll  10
    4  bar  two  large  50
    

3. 通过字典的形式传递多个条件

{‘某列’:[条件],‘某列’:[条件],}

# 这种方法不符合的位置都会显示NAN

>>> df[df.isin({'A':['bar'],'C':['small']})]
     A    B      C   D
0  NaN  NaN  small NaN
1  NaN  NaN    NaN NaN
2  bar  NaN  small NaN
3  bar  NaN    NaN NaN
4  bar  NaN    NaN NaN

4. 删除异常值所在行

因为isin()返还的是boolean的DataFrame,在里面的是True,不在里面的是False,所以我们只需要对它进行异或取反即可。

# 删除A列中foo的行

>>> df[True^df['A'].isin(['foo'])]
     A    B      C   D
2  bar  one  small  10
3  bar  two  samll  10
4  bar  two  large  50

5. isnotin实现

前面加上 ~

# 删除A列中foo的行
>>> df[~(df['A']=='foo')]
     A    B      C   D
2  bar  one  small  10
3  bar  two  samll  10
4  bar  two  large  50

四、loc、iloc(重要)

loc()函数和iloc()函数的区别在于:

  • loc()函数是通过索引名称提取数据
  • iloc()函数通过行和列的下标提取数据

0. 创建DataFrame

>>> import pandas as pd
>>>
>>> data = [['foo', 'one', 'small', 1], ['foo', 'one', 'large', 5],
...         ['bar', 'one', 'small', 10], ['bar', 'two', 'samll', 10],
...         ['bar', 'two', 'large', 50]]
>>> df = pd.DataFrame(data, columns=['A', 'B', 'C', 'D'], index=['a', 'b', 'c', 'd', 'e'])
>>> print(df)
     A    B      C   D
a  foo  one  small   1
b  foo  one  large   5
c  bar  one  small  10
d  bar  two  samll  10
e  bar  two  large  50

1. 提取行数据

>>> # loc取索引为a的行(第一行)
>>> df.loc['a']
A      foo
B      one
C    small
D        1
Name: a, dtype: object
>>>
>>> # iloc取索引为a的行(第一行)
>>> df.iloc[0]
A      foo
B      one
C    small
D        1
Name: a, dtype: object

2. 提取列数据

>>> # loc取A列所有行
>>> df.loc[:, ['A']]
     A
a  foo
b  foo
c  bar
d  bar
e  bar
>>>
>>> # iloc取A列所有行
>>> df.iloc[:,[0]]
     A
a  foo
b  foo
c  bar
d  bar
e  bar

3. 提取多列数据

(1)连续多列:

>>> # loc取A,B,C列所有行
>>> df.loc[:, ['A', 'B', 'C']]
     A    B      C
a  foo  one  small
b  foo  one  large
c  bar  one  small
d  bar  two  samll
e  bar  two  large
>>>
>>> # iloc取A,B,C列所有行
>>> df.iloc[:, 0:3]
     A    B      C
a  foo  one  small
b  foo  one  large
c  bar  one  small
d  bar  two  samll
e  bar  two  large

(2)不连续多列

>>> # loc取A,D列所有行
>>> df.loc[:, ['A', 'D']]
     A   D
a  foo   1
b  foo   5
c  bar  10
d  bar  10
e  bar  50
>>>
>>> # iloc取A,D列所有行
>>> df.iloc[:, [0,3]]
     A   D
a  foo   1
b  foo   5
c  bar  10
d  bar  10
e  bar  50

4. 提取指定行、指定列数据

>>> # loc取索引为a、d,并且列名也为A、D的行和列
>>> df.loc[['a', 'd'], ['A', 'D']]
     A   D
a  foo   1
d  bar  10
>>>
>>> # iloc取索引为a、d,并且列名也为A、D的行和列
>>> df.iloc[[0, 3], [0, 3]]
     A   D
a  foo   1
d  bar  10

5. 提取所有数据

>>> # loc取全部
>>> df.loc[:,:]
     A    B      C   D
a  foo  one  small   1
b  foo  one  large   5
c  bar  one  small  10
d  bar  two  samll  10
e  bar  two  large  50
>>>
>>> # iloc取全部
>>> df.iloc[:,:]
     A    B      C   D
a  foo  one  small   1
b  foo  one  large   5
c  bar  one  small  10
d  bar  two  samll  10
e  bar  two  large  50

6. 提取指定数据行

利用loc可以对值进行筛选

>>> # loc取A列值为foo的行
>>> df.loc[df['A'] == 'foo']
     A    B      C  D
a  foo  one  small  1
b  foo  one  large  5
>>>
>>> # loc取D值大于等于10的行
>>> df.loc[df['D'] >= 10]
     A    B      C   D
c  bar  one  small  10
d  bar  two  samll  10
e  bar  two  large  50

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vmware16安装windows server 2008 VMware Tools

vmware16安装windows server 2008,安装完成后不会自动安装VMware Tools。而是出现如下提示: 简易安装正在安装Windows Server 2008 R2 x64。安装完操作系统后,需要手动安装VMware Tools。请参阅 https://kb.vmware.com/s/article/78708 附件下载 本文…

FPGA时序优化技术之重定时(Retiming)

介绍 重定时(Retiming)是一个智能过程,通过组合延迟路径向后和/或向前移动和平衡寄存器以获得最佳定时,同时保持电路的功能行为。重定时算法可以在不考虑互连延迟的情 况下,在同一边沿上由一个时钟对电路进行定时时找到…

【Linux vim】vim的基本使用,命令模式的指令集

目录 1.yum相当于手机的应用商店 2.vim的3种常用的模式 3.vim的基本使用(写出一个hello vim的代码) 4. 命令模式的指令集 1.yum相当于手机的应用商店 1.1查找 [rootVM-24-5-centos ~]# yum list #查找所有的安装包 但是查找结果太多了,可…

神州战神笔记本清灰+换硅脂-记录

文章目录Introduction拆清灰涂抹硅脂安装开机测试Introduction 笔记本购买于2020年4月份左右,至今已使用2年半时间。CPU是i7-9750H,基准频率是2.6GHz, 用control center 3.0开静音模式CPU会自动降频到1.5~2.6之间,日常办公都有些卡顿&#x…

docker配置阿里云镜像加速

一、快速使用-docker配置阿里云镜像 1、安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档docker-ce 2. 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加…

架构师必读 —— 逻辑模型(2)

用三角逻辑阐明观点: 通常用三角逻辑来表示逻辑的三大要素之间的关系。所谓三角逻辑,就是“观点” “论据” “数据”之间保持协调一致。观 点是指,话题的结论、提案或意见、推论。论据是指,佐证观点 的原理、原则、规律、普遍倾向…

阿里云-数据仓库-数据分析开发神器-ODPS

一、 ODPS 基本面-F10 1、什么是ODPS? 1、开发数据处理服务(Open Data Processing Service,简称ODPS),2016年后更名MaxComputer。ODPS是一种由阿里云自主研发,针对TB/PB级数据、实时性要求不高的分布式处理服务。主要服务于批量结…

NoSQL数据库原理与应用综合项目——MongoDB篇

NoSQL数据库原理与应用综合项目——MongoDB篇 文章目录NoSQL数据库原理与应用综合项目——MongoDB篇0、 写在前面1、本地数据或HDFS数据导入到MongoDB2、MongoDB数据库表操作2.1 Java API 连接MongoDB2.2 查询数据2.3 插入数据2.4 修改数据2.5 删除数据3、MongoDB数据库表进行数…

Prettier系列之配置

文章の目录一、在文件目录中创建一个.prettierrc文件二、添加规则1、Print Width2、Tab Width3、Tabs4、Semicolons4.1、true----在每个语句的末尾添加一个分号。4.2、false----只在可能导致ASI失败的行开头添加分号。5、Quotes6、Quote Props6.1、as-needed6.2、consistent6.3…

Compose挑灯夜看 - 照亮手机屏幕里面的书本内容

一、前言 上一篇文章 Compose回忆童年 - 手拉灯绳-开灯/关灯里面82年钨丝灯,让我又有了新的想法,我们怎么照亮手机里面的文本内容呢? 我们会在上一篇文章的基础上来实现“挑灯夜看”的功能,怎么下手呢?往下看&#x…

小程序01/小程序 全局配置 tabBar 介绍、小程序模板语法数据绑定 wxml渲染

一.全局配置 tabBar 介绍 tabBar说明: tabBar是配置全局 页面底部导航 tabBar内包含 页面底部导航 背景 按钮 文字 文字颜色 注意: tabBar内list 最多是 5 项 ,最少是 2 项 二.小程序模板语法数据绑定 说明: index.js文件data内定义属性 在index.wxml内渲染 in…

靠steam搬砖项目,傻瓜式操作单日500+,可放大操作

在分享干货之前,作为一个从15年开始创业的过来人,先教大家怎么分辨网络上的项目靠不靠谱,以后擦亮眼睛再做,切记!!!!! 1、回本周期性我这个人比较俗,创业就是…

我的世界(MC) forge 1.19.3 开服教程

Debian系统使用MCSManager9面板搭建Minecraft Java版MOD服务器的教程,本教程用的forge1.19.3服务端,用其他服务端的也可以参考一下。 其他版本我的世界服务器搭建教程:https://blog.zeruns.tech/tag/mc/各种Minecraft服务端介绍和下载&#…

双线性变换法MATLAB实现巴特沃斯低通滤波器

实验名称 数字信号处理实验4 实验(实习)日期 12.13 得分 指导老师 学院 电信院 专业 电子信息工程 年级 2020 班次 姓名 学号 20208327 1.实验目的 掌握利用MATLAB求滤波器阶数和自然截至频率&#…

手把手带你理解TPS趋势分析

在性能分析中,前端的性能工具,我们只需要关注几条曲线就够了:TPS、响应时间和错误率。这是我经常强调的。 但是关注 TPS 到底应该关注什么内容,如何判断趋势,判断了趋势之后,又该如何做出调整,调整之后如何定位原因,这才是我们关注 TPS 的一系列动作。 今天,我们就通…

SSM闲置物品

14-13开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字):基于s5m闲置物品交易系统 网站前台:关于我们、联系我们、公告信息、闲置物品、求购信息 管理员功能&…

SQL语句练习06

目录 一、建表 二、SQL语句练习 一、建表 一、建立如下学生表(命名格式“姓名拼音_三位学号_week8student”,如LBJ_023_week8student) create table LYL_116_week8student(SNO int primary key, SNAME char(8) not null unique,SEX char(2), DEPTNO i…

初学Nodejs(7):mysql模块的简单使用

文章目录Nodejsmysql模块1、在项目中操作数据库的步骤1.1 安装操作mysql数据库的第三方模块(mysql)1.2 通过mysql模块连接到mysql数据库,并进行必要配置1.3 通过mysql模块执行sql语句1.3.1 查询数据1.3.2 插入数据插入数据的快捷方式1.3.3 更…

43_读写内部Flash实验

目录 STM32的内部FLASH简介 内部FLASH的构成 主存储器 系统存储区 对内部FLASH的写入过程 解锁 擦除扇区 写入数据 操作内部FLASH的库函数 FLASH解锁、上锁函数 设置操作位数及擦除扇区 写入数据 实验源码 STM32的内部FLASH简介 在STM32芯片内部有一个FLASH(nor …

vTESTstudio入门到精通 - vTESTstudio工具栏介绍_ Traceability Documentation Environment

由于Traceability & Documentation和Environment的两块内容较少,所以就合并起来介绍,单独的功能介绍略少,就不分开了,vTESTstudio工具栏介绍这块内容主要也是给大家做个普及,大家也是主要做个了解,方便…