首页 > 其他分享 >DataFrame按条件筛选、修改数据:df.loc[]拓展

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

时间:2024-05-13 15:19:30浏览次数:12  
标签:loc df DataFrame 小区 str 筛选

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

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

import pandas as pd


Student_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小区'的学生了。

标签:loc,df,DataFrame,小区,str,筛选
From: https://www.cnblogs.com/HeroZhang/p/18189296

相关文章

  • 【拓扑排序】【DFS】课程表
    题源解法1DFS思路:最先被放入栈中的节点是在拓扑排序中最后面的节点一开始用了DFS,但是出现了问题DFS函数在正确处理循环检测方面存在问题:循环检测逻辑问题:在您的DFS中,您检查一个课程是否已被访问,如果已被访问,则立即将valid设置为False。这种方式并没有正确区分处于当前路......
  • PDF编辑工具有哪些 5款好用的PDF批注编辑软件推荐
    PDF作为目前一种常见的文档形式,我们在一些商务往来、培训宣讲或者是考试学习中经常用到。它方便阅读,比Word版更正式,但是缺点是不能直接在上面加批注做修改,用起来会有些不便。那么有没有什么工具可以不用转化PDF格式,直接在PDF文档上做批注修改呢?当然有这样的软件,今天小编就来简单分......
  • RAG学习--pdf读取
    RAG流程:线下:1、文档加载2、文档切分3、向量化4、向向量数据库灌数据线上:1、获取用户问题2、用户问题向量化3、检索向量数据库4、将检索结果和问题填充到pomp模板5、用最终获得的pomp调用LLM6、最终由LLM生成回复本篇完成文档加载与切割(pdf加载与切割)1、文档加载......
  • 【TransmittableThreadLocal】TransmittableThreadLocal的实现机制和原理
    1 前言前面我看过了 ThreadLocal的实现机制和原理 以及 InheritableThreadLocal的实现机制和原理 两种类型的ThreadLocal,前者是普通的,后者是在前者的基础上套了一层父子线程关系,当使用后者的时候,会在线程创建的时候,浅拷贝一份父线程的变量值。那么今天空了,我来看看另外一......
  • ThreadLocal入门笔记
    ThreadLocal入门笔记最近学习小傅哥的面经手册,学习到ThreadLocal,这里做个笔记加深印象,也方便日后复习。ThreadLocal是除了加锁这种同步方式之外的一种规避多线程访问出现线程不安全的方法,它的核心思想是:共享变量在每个线程都有一个副本,每个线程操作的都是自己的副本,对另外的线程......
  • 微软官方确认!Win11 24H2将默认启用BitLocker磁盘加密
    微软近日向国外媒体确认,Windows1124H2版本将在系统装机时默认启用BitLocker磁盘加密。微软表示,已经对安装程序进行了调整,移除了之前与ModernStandby/HSTI验证和不受信任的DMA端口检查相关的步骤,用户在重新安装Windows11过程中,将会默认启用设备加密。尽管这一默认加密策略近......
  • C# 使用QuestPDF各种报错,System.IO.FileNotFoundException:“未能加载文件或程序集,Dll
    最近要做一个生成pdf报告的小功能,搜索一番之后,选择了QuestPDF这个库由于我是要在netframework4.8中实现功能,可能使用场景太老了,导致使用过程一波三折,非常的坎坷,折腾了一下午,增长了一些经验,记录下来1,如果你要在netframework4.8框架中使用,就不要自作聪明的用netstandard2.0框架......
  • ReentrantLock分为公平锁和非公平锁,那底层分别是如何实现的
    ReentrantLock在Java中是通过AbstractQueuedSynchronizer(AQS)框架实现的,它提供了公平锁(FairSync)和非公平锁(NonfairSync)两种模式。这两种锁的实现主要区别在于获取锁的策略。importjava.util.concurrent.locks.ReentrantLock;publicclassReentrantLockDemo{//非公平......
  • ReentrantLock分为公平锁和非公平锁,那底层分别是如何实现的
    ReentrantLock在Java中是通过AbstractQueuedSynchronizer(AQS)框架实现的,它提供了公平锁(FairSync)和非公平锁(NonfairSync)两种模式。这两种锁的实现主要区别在于获取锁的策略。importjava.util.concurrent.locks.ReentrantLock;publicclassReentrantLockDemo{//非公平......
  • 这款PDF解析工具,精准触达大模型问答应用的需要
    过去的一年,是大语言模型快速发展的一年。大模型强大的语言理解能力,逐渐让用户习惯了将各类文章丢给大模型,让它来帮忙总结提炼。从产品角度看,这是一次10倍体验的飞跃,意味着巨大的市场机会。也因此,市面上涌现出了大量的文档+大模型的应用。但大多数的开发者普遍都会遇到一个问题,那......