pandas 筛选数据的 8 个骚操作

news2024/9/21 4:38:25

日常用Python做数据分析最常用到的就是查询筛选了,按各种条件、各种维度以及组合挑出我们想要的数据,以方便我们分析挖掘。

东哥总结了日常查询和筛选常用的种骚操作,供各位学习参考。本文采用sklearnboston数据举例介绍。

from sklearn import datasets
import pandas as pd

boston = 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或其他指定值。举例如下,将Sexmale当作筛选条件,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'] > 25

train['quality'].where(cond1 & cond2, other='低质量男性', inplace=True)

图片

maskwhere是一对操作,与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结果便为Trueall需要所有值为True结果才为True,比如下面这样。

>> train['Cabin'].all()
>> False
>> train['Cabin'].any()
>> True

anyall一般是需要和其它操作配合使用的,比如查看每列的空值情况。

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

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

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

相关文章

3基于MATLAB的齿轮啮合仿真,可根据需要调节齿轮参数,实现齿轮啮合转动动态过程。程序已调通,可直接运行。

基于MATLAB的齿轮啮合仿真&#xff0c;可根据需要调节齿轮参数&#xff0c;实现齿轮啮合转动动态过程。程序已调通&#xff0c;可直接运行。 3matlab齿轮啮合仿真动态啮合 (xiaohongshu.com)

动态负荷对电力系统摆幅曲线的影响研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

springboot使用freemarker导出word

springboot使用freemarker导出word 一、需求说明二、制作模板文件1.修改word留下占位符并另存为.xml文件2.将xml文件后缀名改为.ftl3.打开ftl文件格式化内容4.将占位符替换成变量 三、代码实现1.引入依赖2.将模板引入resource下3.编写word导出工具包4.创建接口调用 一、需求说明…

eslint写jsx报错

eslint写jsx报错 ChatGPT提示 在写JSX时&#xff0c;ESLint可能会报出一些语法错误&#xff0c;这些错误通常是由于ESLint默认配置中不支持JSX语法导致的。为了解决这些错误&#xff0c;我们需要在ESLint配置文件中启用对JSX语法的支持。 首先&#xff0c;需要安装eslint-pl…

100道基于Android毕业设计的选题题目,持续更新

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 大家好&#xff0c;我是程序员徐师兄、今天给大家谈谈基于android的app开发毕设题目&#xff0c;以及基于an…

苹果数据恢复软件:Omni Recover Mac

Omni Recover是一款十分实用的Mac数据恢复软件&#xff0c;为用户提供了简单、安全、快速和高效的数据恢复服务。如果您遇到了Mac或iOS设备中的数据丢失和误删情况&#xff0c;不要着急&#xff0c;不妨尝试一下Omni Recover&#xff0c;相信它一定会给您带来惊喜。 首先&…

【Bun1.0】使用 Bun.js 构建快速、可靠和安全的 JavaScript 应用程序

bun.js Bun 是一个现代的JavaScript运行环境&#xff0c;如Node, Deno。主要特性如下: 启动速度快。更高的性能。完整的工具&#xff08;打包器、转码器、包管理&#xff09;。 官网 https://bun.sh 优点 与传统的 Node.js 不同&#xff0c;Bun.js 提供了一些新的特性和功…

第8章_freeRTOS入门与工程实践之内存管理

本教程基于韦东山百问网出的 DShanMCU-F103开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id724601559592 配套资料获取&#xff1a;https://rtos.100ask.net/zh/freeRTOS/DShanMCU-F103 freeRTOS系列教程之freeRTOS入…

《Linkerd 2.0:下一代服务网格的探索》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

C++下基于模拟退火算法解决TSP问题

一、原理 首先明确TSP问题的目标是什么&#xff0c;假设当前有3个城市&#xff0c;需要你从第一个城市开始&#xff0c;遍历所有城市&#xff0c;然后回到初始位置&#xff0c;要求总路径最短。这个时候就需要计算每个城市之间的两两距离&#xff0c;然后按顺序确定一条最短路…

【Unity】2D 对话模块的实现

对话模块主要参考 【Unity教程】剧情对话系统 实现。 在这次模块的构建将基于 unity ui 组件 和 C#代码实现一个从excel 文件中按照相应规则读取数据并展示的逻辑。这套代码不仅能实现正常的对话&#xff0c;也实现了对话中可以通过选择不同选项达到不同效果的分支对话功能。 …

机器视觉康耐视visionpro-CogFitLineTool拟合直线错误上的理解

视频详细解答&#xff1a;康耐视VisionPro高级脚本系列教程-2.拟合指教脚本遍历编写 什么是直线&#xff1f; 直线&#xff1a;那么直线是由无线的点组成的。特点是无端点&#xff1b;不能度量&#xff0c;两边无限延长。错误示例子如下&#xff1a; 首先上面是错误的理解&…

UG\NX CAM二次开发 设置工序切削区域 UF_CAMGEOM_append_items

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 设置工序切削区域 UF_CAMGEOM_append_items 效果: 代码: static int init_proc(UF_UI_selection_p_t select, void* user_data) { int errorCode = 0; int num_triples = 1;//UF_UI_mas…

来可LCWLAN-600P产品使用和常见问题说明

01LCWLAN-600P简介 LCWLAN-600P是来可电子最新生产的一款CAN转WiFi设备&#xff0c;该设备的主要功能是将CAN数据转换成网络数据并通过无线网络转发出去。设备支持8~30V宽压供电&#xff0c;出厂默认配置为AP模式&#xff0c;设备供电后可在电脑的WiFi搜索栏搜索到名称为LCWLA…

2023年意大利富时MIB指数研究报告

第一章 指数概况 1.1 指数基本情况 富时MIB指数&#xff08;意大利语&#xff1a;Financial Times Stock Exchange Milano Indice di Borsa, FTSE MIB&#xff09;&#xff0c;2009年6月之前称为S&P/MIB&#xff0c;是意大利证券交易所的基准股票市场指数。该指数于2004年…

[其他]IDEA中Maven项目配置国内源

配置国内源主要解决了,在maven项目中pom.xml下载jar包失败或过慢的问题. 在IDEA中的设置分成两种,设置当前项目与新创项目. 我们就需要两种都进行设置,不然只有在当前项目配置了国内源,新创项目的时候还是默认的状态. 由于下面两种设置的界面与方法是一致的,下面以当前项目设…

jmeter采集ELK平台海量业务日志( 采用Scroll)

由于性能测试需要&#xff0c;需采集某业务系统海量日志&#xff08;百万以上&#xff09;来使用&#xff0c;做稳定性压测使用。但Elasticsearch的结果分页size单次最大为10000&#xff08;运维同事为保证ES安全&#xff09;。为了能够快速采集ELK平台业务日志&#xff0c;可以…

Python解释器和Pycharm的傻瓜式安装部署

给我家憨憨写的python教程 有惊喜等你找噢 ——雁丘 Python解释器Pycharm的安装部署 关于本专栏一 Python解释器1.1 使用命令提示符编写Python程序1.2 用记事本编写Python程序 二 Pycharm的安装三 Pycharm的部署四 Pycharm基础使用技巧4.1 修改主题颜色4.2 修改字体4.3 快速修…

# (1462. 课程表 IV leetcode)广搜+拓扑-------------------Java实现

&#xff08;1462. 课程表 IV leetcode&#xff09;广搜拓扑-------------------Java实现 题目表述 你总共需要上 numCourses 门课&#xff0c;课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite &#xff0c;其中 prerequisites[i] [ai, bi] 表示如果你想…

【Fiddler】mac m1 机器上使用 fiddler 抓取接口

mac m1 机器上使用 fiddler 抓取接口&#xff08;非虚拟机模式&#xff09; author: jwensh date:2023.09.12 文章目录 mac m1 机器上使用 fiddler 抓取接口&#xff08;非虚拟机模式&#xff09;1. 环境准备2. 进行配置3. 使用情况 1. 环境准备 想要抓取 mac 上浏览器的接口&a…