pandas 筛选数据的 8 个骚操作
日常用Python
做数据分析最常用到的就是查询筛选了,按各种条件、各种维度以及组合挑出我们想要的数据,以方便我们分析挖掘。
东哥总结了日常查询和筛选常用的种骚操作,供各位学习参考。本文采用sklearn
的boston
数据举例介绍。
from sklearn import datasets
import pandas as pdboston = datasets.load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
1. []
第一种是最快捷方便的,直接在dataframe的[]
中写筛选的条件或者组合条件。比如下面,想要筛选出大于NOX
这变量平均值的所有数据,然后按NOX
降序排序。
df[df['NOX']>df['NOX'].mean()].sort_values(by='NOX',ascending=False).head()
当然,也可以使用组合条件,条件之间使用逻辑符号& |
等。比如下面这个例子除了上面条件外再加上且条件CHAS为1
,注意逻辑符号分开的条件要用()
隔开。
df[(df['NOX']>df['NOX'].mean())& (df['CHAS'] ==1)].sort_values(by='NOX',ascending=False).head()
2. loc/iloc
除[]
之外,loc/iloc
应该是最常用的两种查询方法了。loc
按标签值(列名和行索引取值)访问,iloc
按数字索引访问,均支持单值访问或切片查询。除了可以像[]
按条件筛选数据以外,loc
还可以指定返回的列变量,从行和列两个维度筛选。
比如下面这个例子,按条件筛选出数据,并筛选出指定变量,然后赋值。
df.loc[(df['NOX']>df['NOX'].mean()),['CHAS']] = 2
3. isin
上面我们筛选条件< > == !=
都是个范围,但很多时候是需要锁定某些具体的值的,这时候就需要isin
了。比如我们要限定NOX
取值只能为0.538,0.713,0.437
中时。
df.loc[df['NOX'].isin([0.538,0.713,0.437]),:].sample(5)
当然,也可以做取反操作,在筛选条件前加~
符号即可。
df.loc[~df['NOX'].isin([0.538,0.713,0.437]),:].sample(5)
4. str.contains
上面的举例都是数值大小比较的筛选条件,除数值以外当然也有字符串的查询需求。pandas
里实现字符串的模糊筛选,可以用.str.contains()
来实现,有点像在SQL语句里用的是like
。
下面利用titanic的数据举例,筛选出人名中包含Mrs
或者Lily
的数据,|
或逻辑符号在引号内。
train.loc[train['Name'].str.contains('Mrs|Lily'),:].head()
.str.contains()
中还可以设置正则化筛选逻辑。
- case=True:使用case指定区分大小写
- na=True:就表示把有NAN的转换为布尔值True
- flags=re.IGNORECASE:标志传递到re模块,例如re.IGNORECASE
- regex=True:regex :如果为True,则假定第一个字符串是正则表达式,否则还是字符串
5. where/mask
在SQL里,我们知道where
的功能是要把满足条件的筛选出来。pandas中where
也是筛选,但用法稍有不同。
where
接受的条件需要是布尔类型的,如果不满足匹配条件,就被赋值为默认的NaN
或其他指定值。举例如下,将Sex
为male
当作筛选条件,cond
就是一列布尔型的Series,非male的值就都被赋值为默认的NaN
空值了。
cond = train['Sex'] == 'male'
train['Sex'].where(cond, inplace=True)
train.head()
也可以用other
赋给指定值。
cond = train['Sex'] == 'male'
train['Sex'].where(cond, other='FEMALE', inplace=True)
甚至还可以写组合条件。
train['quality'] = ''
traincond1 = train['Sex'] == 'male'
cond2 = train['Age'] > 25train['quality'].where(cond1 & cond2, other='低质量男性', inplace=True)
mask
和where
是一对操作,与where
正好反过来。
train['quality'].mask(cond1 & cond2, other='低质量男性', inplace=True)
6. query
这是一种非常优雅的筛选数据方式。所有的筛选操作都在''
之内完成。
# 常用方式
train[train.Age > 25]
# query方式
train.query('Age > 25')
上面的两种方式效果上是一样的。再比如复杂点的,加入上面的str.contains
用法的组合条件,注意条件里有''
时,两边要用""
包住。
train.query("Name.str.contains('William') & Age > 25")
在query
里还可以通过@
来设定变量。
name = 'William'
train.query("Name.str.contains(@name)")
7. filter
filter
是另外一个独特的筛选功能。filter
不筛选具体数据,而是筛选特定的行或列。它支持三种筛选方式:
- items:固定列名
- regex:正则表达式
- like:以及模糊查询
- axis:控制是行index或列columns的查询
下面举例介绍下。
train.filter(items=['Age', 'Sex'])
train.filter(regex='S', axis=1) # 列名包含S的
train.filter(like='2', axis=0) # 索引中有2的
train.filter(regex='^2', axis=0).filter(like='S', axis=1)
8. any/all
any
方法意思是,如果至少有一个值为True
结果便为True
,all
需要所有值为True
结果才为True
,比如下面这样。
>> train['Cabin'].all()
>> False
>> train['Cabin'].any()
>> True
any
和all
一般是需要和其它操作配合使用的,比如查看每列的空值情况。
train.isnull().any(axis=0)
再比如查看含有空值的行数。
>>> train.isnull().any(axis=1).sum()
>>> 708
e
`any`和`all`一般是需要和其它操作配合使用的,比如查看每列的空值情况。
train.isnull().any(axis=0)
[外链图片转存中...(img-QYyk6pc2-1694485667807)]再比如查看含有空值的行数。
train.isnull().any(axis=1).sum()
708
相关文章:

pandas 筛选数据的 8 个骚操作
日常用Python做数据分析最常用到的就是查询筛选了,按各种条件、各种维度以及组合挑出我们想要的数据,以方便我们分析挖掘。 东哥总结了日常查询和筛选常用的种骚操作,供各位学习参考。本文采用sklearn的boston数据举例介绍。 from sklearn …...

【随想】每日两题Day.3(实则一题)
题目:59.螺旋矩阵|| 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2: …...

阿里后端开发:抽象建模经典案例【文末送书】
文章目录 写作前面1.抽象思维2.软件世界中的抽象3. 经典抽象案例4. 抽象并非一蹴而就!需要不断假设、验证、完善5. 推荐一本书 写作末尾 写作前面 在互联网行业,软件工程师面对的产品需求大都是以具象的现实世界事物概念来描述的,遵循的是人…...

HarmonyOS Codelab 优秀样例——溪村小镇(ArkTS)
一、介绍 溪村小镇是一款展示溪流背坡村园区风貌的应用,包括园区内的导航功能,小火车行车状态查看,以及各区域的风景展览介绍,主要用于展示HarmonyOS的ArkUI能力和动画效果。具体包括如下功能: 打开应用时进入启动页&a…...
Mybatis---第二篇
系列文章目录 文章目录 系列文章目录一、#{}和${}的区别是什么?二、简述 Mybatis 的插件运行原理,如何编写一个插件一、#{}和${}的区别是什么? #{}是预编译处理、是占位符, KaTeX parse error: Expected EOF, got # at position 27: …接符。 Mybatis 在处理#̲{}时,会将…...

6.2.3 【MySQL】InnoDB的B+树索引的注意事项
6.2.3.1 根页面万年不动窝 B 树的形成过程是这样的: 每当为某个表创建一个 B 树索引(聚簇索引不是人为创建的,默认就有)的时候,都会为这个索引创建一个 根节点 页面。最开始表中没有数据的时候,每个 B 树…...
前端面试话术集锦第 12 篇:高频考点(Vue常考基础知识点)
这是记录前端面试的话术集锦第十二篇博文——高频考点(Vue常考基础知识点),我会不断更新该博文。❗❗❗ 这一章节我们将来学习Vue的一些经常考到的基础知识点。 1. 生命周期钩子函数 在beforeCreate钩子函数调用的时候,是获取不到props或者data中的数据的,因为这些数据的…...

骨传导耳机危害有哪些?值得入手吗?
事实上,只要是正常使用,骨传导耳机并不会对身体造成伤害,并且在众多耳机种类中,骨传导耳机可以说是相对健康的一种耳机,这种耳机最独特的地方便是声波不经过外耳道和鼓膜, 而是直接将人体骨骼结构作为传声介…...

网络爬虫-----初识爬虫
目录 1. 什么是爬虫? 1.1 初识网络爬虫 1.1.1 百度新闻案例说明 1.1.2 网站排名(访问权重pv) 2. 爬虫的领域(为什么学习爬虫 ?) 2.1 数据的来源 2.2 爬虫等于黑客吗? 2.3 大数据和爬虫又有啥关系&…...

vue 功能:点击增加一项,点击减少一项
功能介绍: 默认为一列,当点击右侧"" 号,增加一列;点击 “-” 号,将当前列删除; 功能截图: 功能代码: //HTML <el-col :span"24"><el-form-item lab…...
我的编程学习笔记
1. 引言: 在开始编写任何代码之前,都需要理解编程的基本概念。编程是人与计算机进行交流的方式,它让计算机可以理解和执行特定的任务。编程语言是这种交流的工具,而学习编程就是学习如何用特定的语言表达出我们想要的计算机行为。…...

页面静态化、Freemarker入门
页面静态化介绍 页面的访问量比较大时,就会对数据库造成了很大的访问压力,并且数据库中的数据变化频率并不高。 那需要通过什么方法为数据库减压并提高系统运行性能呢?答案就是页面静态化。页面静态化其实就是将原来的动态网页(例如通过ajax…...

PCL (再探)点云配准精度评价指标——均方根误差
目录 一、算法原理二、代码实现三、代码解析四、备注本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 见: 点云配准精度评价指标——均方根误差PCL 点云配准精度评价——点到面的均方根误差Open3D(C++) 点…...
【Redis速通】基础知识1 - 虚拟机配置与踩坑
Ubuntu 配置 Redis 下载 redis 找到 redis 官网界面,下载 redis6.2LTS 点击前往 用 mobax 连接到 ubuntu 虚拟机,把下载好的 tar.gz 文件丢到任意一个文件夹下面 进入该文件夹,于此处打开终端,进行解压操作:tar -z…...

我的创作纪念日---从考研调剂到研一的旅程
文章目录 一、前言二、机缘三、收获四、日常五、憧憬 一、前言 大家好,我是小馒头学Python,小馒头学Python就是我,今天是我第一次收到创作纪念日的私信,去年的今天我还在考研,那个时候整天浑浑噩噩的,迷茫…...
Python-实现邮件发送:flask框架或django框架可以直接使用
在项目中,会使用到发送邮件的功能。不同框架的配置可能有所不同,直接写一个不依赖框架配置的邮件发送模块。 使用的功能: 1、可以发送给多个邮箱 2、可以实现抄送多个邮箱 3、可以添加多个文件附件 一、不使用多线程 import smtplib from…...

使用亚马逊云科技Amazon SageMaker,为营销活动制作广告素材
广告公司可以使用生成式人工智能和文字转图像根基模型,制作创新的广告素材和内容。在本篇文案中,将演示如何使用亚马逊云科技Amazon SageMaker从现有的基本图像生成新图像,这是一项完全托管式服务,用于大规模构建、训练和部署机器…...

conda环境安装opencv带cuda版本
主要是cmake编译选项需要修改 以下两个选项按照自己情况修改 -D OPENCV_EXTRA_MODULES_PATH../opencv_contrib/modules \ -D CUDA_TOOLKIT_ROOT_DIR/usr/local/cuda-12.2 \ 其中/home/lixin/anaconda3/envs/stereo 改成你自己的conda环境 cmake -D CMAKE_BUILD_TYPER…...
R语言中的数据结构----矩阵
目录 (1)创建矩阵 (2) 线性代数运算 (3)矩阵索引 (4)矩阵元素的筛选 (5)增加或删除矩阵的行或列 (6)apply()函数 (…...

Llama-2 推理和微调的硬件要求总结:RTX 3080 就可以微调最小模型
大语言模型微调是指对已经预训练的大型语言模型(例如Llama-2,Falcon等)进行额外的训练,以使其适应特定任务或领域的需求。微调通常需要大量的计算资源,但是通过量化和Lora等方法,我们也可以在消费级的GPU上…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...