pandas 筛选数据的 8 个骚操作

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

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

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或其他指定值。举例如下,将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'] > 25train['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.rhkb.cn/news/131046.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《深入分布式追踪:OpenTracing 实践手册》

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

澄海区图书馆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著

澄海区图书馆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著

Android Aidl跨进程通讯(四)--接口回调,服务端向客户端发送数据

学更好的别人&#xff0c; 做更好的自己。 ——《微卡智享》 本文长度为3325字&#xff0c;预计阅读9分钟 前言 前几篇介绍了AIDL通讯的基础&#xff0c;进阶和异常捕获&#xff0c;本篇就来看看服务端怎么向客户端来实现发送消息。 实现服务端往客户端发送消息&#xff0c;主要…

opencv(python)视频按帧切片/cv2.VideoCapture()用法

一、介绍 cv2.VideoCapture是OpenCV中一个用于捕捉视频的类。它可以访问计算机的摄像头&#xff0c;或从视频文件中读取图像。通过cv2.VideoCapture&#xff0c;用户可以轻松地捕捉、保存、编辑和传输视频流数据。 使用cv2.VideoCapture可以实现以下功能&#xff1a; 1. 打开…

Spring-Cloud GateWay+Vue 跨域方案汇总

文章目录 一、简介背景和概述 二、前端跨域解决方案Axios跨域CORS跨域 三、后端跨域解决方案反向代理服务器 四、Spring Cloud中的跨域解决方案Gateway网关的跨域配置 五、基于Vue和Spring Cloud的跨域整合实践**这两种配置只需配置一种即可生效&#xff08;前端or后端&#xf…

原型链解释

一、什么是原型链 原型链是javascript中用来实现类似类继承的一套机制。像链条一样把javascript中的对象连接起来&#xff0c;实现类似子联系父的现象。 二、原型链的实现 总的来说&#xff0c;就是&#xff1a; 对象的__proto__指向其构造器的prototype对象&#xff0c;然后…

分布式id的概述与实现

文章目录 前言一、分布式id技术选型二、雪花算法三、在项目中集成雪花算法 前言 随着业务的增长&#xff0c;数据表可能要占用很大的物理存储空间&#xff0c;为了解决该问题&#xff0c;后期使用数据库分片技术。将一个数据库进行拆分&#xff0c;通过数据库中间件连接。如果…

postgresql -数据库事务与并发控制

postgresql -数据库事务与并发控制 数据库事务事务控制语句并发与隔离数据库事务 事务控制语句 -- serial 自增 CREATE TABLE accounts(id serial PRIMARY KEY,user_name varchar(50),balance numeric

[php] 文件上传的一个项目emmm

项目完整地址 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>上传文件</title><link href"./css/bootstrap.min.css" rel"stylesheet"><style>font-face {fo…

广州xx策划公司MongoDB恢复-2023.09.09

2023.09.08用户的MongoDB数据库被勒索病毒攻击&#xff0c;数据全部被清空。 提示&#xff1a; mongoDB的默认端口为27017&#xff0c;黑客通常通过全网段扫描27017是否开放判断是否是MongoDB服务器。一旦发现27017开放&#xff0c;黑客就会用空密码、弱密码尝试连接数据库。黑…

经典排序算法总结

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

深入理解JVM虚拟机第四篇:一些常用的JVM虚拟机

一&#xff1a;Sun Classic VM虚拟机 早在1996年Java1.0版本的时候&#xff0c;Sun公司发布了一款名为Sun classic VM的Java虚拟机&#xff0c;它同时也是世界上第一款商用Java虚拟机&#xff0c;JDK1.4时完全被淘汰。 现在hotspot内置了此虚拟机。 这款虚拟机内部只提供解释器…

银行笔试篇---职业能力测试(行测)

数字推理 数字推理可分为等差数列、等比数列、和数列、积数列、幂数列以及分数数列六类&#xff0c;做题时的总体原则为&#xff1a; 关键点1&#xff1a;凡是一次变化找不到规律的&#xff0c;直接放弃&#xff01;所谓一次变化指的是&#xff1a;1.通过一次相邻两数作差、作…

【数据库】Navicate运行数据区sql文件 1046 no database selected

文章目录 前言一、现象二、解决 前言 要通过Navicat导入数据库文件&#xff0c;但是不成功报错1046 no database selected 一、现象 选中已经建立的连接&#xff0c;右键运行sql文件&#xff0c;报错 二、解决 1、先在建立的localhost中右键建立和要导入数据库同名的数据…

C++信息学奥赛1170:计算2的N次方

#include <iostream> #include <string> #include <cstring>using namespace std;int main() {int n;cin >> n; // 输入一个整数nint arr[100];memset(arr, -1, sizeof(arr)); // 将数组arr的元素初始化为-1&#xff0c;sizeof(arr)表示arr数组的字节…

【STM32】影子寄存器

不可操作但是真正起作用的寄存器是影子寄存器 定时器框图中&#xff0c;有些寄存器下有个阴影 这些阴影的表示这些寄存器存在影子寄存器。 图中也有对这些影子的说明&#xff0c;在U事件时传送预装载寄存器至实际寄存器。 有阴影的寄存器(AutoReloadRegister)&#xff0c;表…

数据库管理软件NoSQLBooster for MongoDB 8.1 Mac

NoSQLBooster for MongoDB 是一款功能强大的 MongoDB 数据库管理工具。它提供了一个直观的用户界面&#xff0c;使用户能够轻松地浏览、查询和修改 MongoDB 数据库中的数据。 NoSQLBooster for MongoDB 支持多种查询方式&#xff0c;包括基本查询、聚合管道、地理空间查询等。它…

Python解析MDX词典数据并保存到Excel

原始数据和处理结果&#xff1a; https://gitcode.net/as604049322/blog_data/-/tree/master/mdx 下载help.mdx词典后&#xff0c;我们无法直接查看&#xff0c;我们可以使用readmdict库来完成对mdx文件的读取。 安装库&#xff1a; pip install readmdict对于Windows平台还…

【建站教程】使用阿里云服务器怎么搭建网站?

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网以搭建WordPress网站博客为例&#xff0c;阿小云来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程&#x…

绝热量热法反应热测试过程中的温度和压力自动跟踪控制解决方案

摘要&#xff1a;现有的ARC加速量热仪普遍存在单热电偶温差测量误差大造成绝热效果不好&#xff0c;以及样品球较大壁厚造成热惰性因子较大&#xff0c;都使得ARC测量精度不高。为此本文提出了技术改进解决方案&#xff0c;一是采用多只热电偶组成的温差热电堆进行温差测量&…