DataFrame按条件筛选、修改数据:df.loc[]拓展

news/2024/9/23 18:17:49

DataFrame按条件筛选、修改数据:df.loc[]拓展

创建一个DataFrame
先通过字典创建一个学生信息的DataFrame。

import pandas as pdStudent_dict = {'姓名':['张三', '李四', '王五', '赵六'],'性别':['男', '女', '男', '女'],'年龄':[20, 21, 19, 18],'Python成绩':[70, 80, 90, 50],'评价':['良好', '良好', '良好', '良好'],'地址':['A小区10幢', 'A小区11幢','B小区10幢','C小区11幢']}

字典创建DataFrame,字典键变DataFrame的列名

df = pd.DataFrame(data=Student_dict, index=['a','b','c','d'])


df.loc[]按某列条件筛选行数据
df.loc[]可以通过布尔列表筛选行数据。比如筛选前两行数据:

df.loc[[True, True, False, False]]


通过布尔列表的方式,可以衍生出下面按条件的选取方式。比如筛选Python成绩>75的学生:

df.loc[df['Python成绩'] > 75] # df.loc[]删选Python成绩>75的学生


除了单个条件,也可以用两个条件筛选数据。比如筛选Python成绩>75的学生,并且年龄>20的学生:

df.loc[(df['Python成绩'] > 75) & (df['年龄'] > 20)] # df.loc[]删选Python成绩>75的学生,并且年龄>20的学生

注:df.loc[]多条件删选数据时,不同条件需要用(),连接条件如果是且符号是'&',连接条件如果是或符号是'|'。

df.loc[]按某列条件筛选并修改行数据

上面我们学习了如何筛选数据,那么如何筛选并改变数据呢?

日常工作中我们常常需要通过某个条件,去改变DataFrame数据。

比如,我想把Python成绩>=90的学习,评价设置为'优秀':

df.loc[df['Python成绩'] >= 90, '评价'] = '优秀'

df.loc[]筛选并改变数据,需要输入两个参数:

  • 参数1:筛选的条件。
  • 参数2:要改变列的列名。

判断某列数据中是否包含特定字符串或字符串列表

拓展一下df.loc[]筛选数据时常用的条件,判断某列数据中是否包含特定字符串或字符串列表。

比如我想筛选地址包含'A小区'的学生,应该怎么操作?
比如我想筛选地址包含'A小区'或'B小区'的学生,应该怎么操作?

判断某列数据中是否包含特定字符串

筛选地址包含'A小区'的学生:

df.loc[df['地址'].str.contains('A小区')] # df.loc[]删选地址中包含A小区的学生

df['地址'].str.contains('A小区')说明:df['地址'].str,就是对df['地址']进行str操作,str下有很多很多方法,其中contains()是其中一种方法,作用是用来判断是否包含'A小区'。df['xx'].str除了contains方法外,还有cat、split、partition、rpartition、get、slice、slice_replace、join、startswith、endswith、match、replace、repeat、pad、zfill等等方法。

判断某列数据中是否包含特定字符串列表

筛选地址包含'A小区'或'B小区'的学生:
聪明的同学会想到先获取'A小区'的学生,再获取'B小区'的学生,这是可行的。

不过怎样可以一步实现呢?直接放入列表行不行?让我们来试一下。

直接放入列表试试:

xiaoqu_list = ['A小区', 'B小区']
df.loc[df['地址'].str.contains(xiaoqu_list)] TypeError: unhashable type: 'list'

报错啦,不支持输入列表。

解决方法是将列表用'|'进行连接,这样就可以一次性筛选出来了。

xiaoqu_list = ['A小区', 'B小区']
xiaoqu_str = '|'.join(xiaoqu_list)
df[df['地址'].str.contains(xiaoqu_str)]


说明:
'|'.join(xiaoqu_list),是将xiaoqu_list列表用'|'拼接起来,生成一个str字符串。然后就可以一次性筛选地址包含'A小区'或'B小区'的学生了。

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

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

相关文章

inno Setup 打包Java exe可执行文件和MySQL数据库,无需额外配置实现一键傻瓜式安装

前言 出现有需要打包 Java 应用和 Mysql数据库成一个安装包给出去的需求,这里我把整个打包的流程整理一下。 环境 JDK17; MySQL 5.7; 流程 Jpackage打包EXE Jpackage是JDK14后加入的一个用于独立打包的工具,能够将应用打包成exe,有了Jpackage就不需要用exe4j这种打包工具,省…

使用python在windows系统操作快捷方式

其实问题是由上一篇文章(https://www.cnblogs.com/anpengapple/p/18179353)的结尾引出来的。不需要了解背景的话,我现在需要做的是,右键打开桌面上的chrome快捷方式的属性,在目标的后面增加一个参数。我不想傻傻地手动添加,想交给程序来处理。首先需要简单来说一下,wind…

spring之AOP(面向切面编程)

什么是AOP? AOP(Aspect Oriented Programming)意为:面向切面编程,体现了横切的思想,意思是在添加某项功能的时候,是以切面插入的方式实现的,对原有的代码不会产生改变。通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP在spring中的作用:在不改变…

识别与防御CSRF漏洞

识别与防御CSRF漏洞 CSRF(Cross-Site Request Forgery,跨站请求伪造),通常也被称为“一键攻击”或“会话劫持”,其缩写为CSRF或XSRF,是一种针对网站的恶意利用技术。尽管名字听起来与跨站脚本(XSS)相似,但两者在本质上是截然不同的。XSS主要依赖于用户对站点的信任,而…

Linux查看一个目录下占用磁盘最多的文件或目录

想要找到占用磁盘最多的文件或目录,可以使用du和sort命令: du -h /path/to/directory | sort -rh | head -n 10其中:du -h /path/to/directory 用于计算指定目录下的所有文件和子目录的大小,并以人类可读的格式显示。 sort -rh 用于按磁盘使用情况的大小(逆序)对输出进行…

mybatisPlus多数据源的使用使用 lambdaQuery 导致多数据源失效

依赖<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.2</version></dependency>配置文件:spring:datasource:type: com.alibaba.druid.pool.Drui…

什么? 20分钟,构建你自己的LLaMA3应用程序! | 京东云技术团队

4月19日,Meta发布了最新的大语言模型LLaMA3,具体包括一个 8B 模型和一个 70 B 模型,上下文长度支持8K, 被誉为史上最强开源大语言模型,开源社区的“重磅炸弹”,效果直指GTP4。在诸多评测任务上,LLaMA3都有非常炸裂的效果。 8B模型在多项指标中超越了Gemma 7B和Mistral 7…

第三代长安75p安装三方软件

前言 长安的车机系统是 长安与腾讯联合且基于安卓自研的 梧桐车联系统。此系统极为封闭,默认情况下,不允许安装除了车机本身应用商店之外的三方软件。 除此之外,车机内置的软件版本都特别低(比如高德),且不支持升级,只能等待整个车机系统连带升级,遗憾的是他们通常好几…