100天精通Python(数据分析篇)——第73天:Pandas文本数据处理方法之查找、替换、拼接、正则、虚拟变量

news2024/11/20 15:40:46

文章目录

  • 每篇前言
  • 一、Python字符串内置方法
    • 1. 文本查找
    • 2. 文本替换
    • 3. 文本拼接
    • 4. 正则提取
  • 二、Pandas实现文本查找
    • 1. str.startswith(字符串)
    • 2. str.endswith(字符串)
    • 3. str.index(字符串, start=0, end=len(string))
    • 4. str.rindex(字符串, start=0, end=len(string))
    • 5. str.find(字符串, start=0, end=len(string))
    • 6. str.rfind(字符串, start=0, end=len(string))
    • 8. str.contains(字符串)
  • 三、Panda实现文本替换
    • 1. str.replace(old_str, new_str)
      • 1)普通替换
      • 2)正则替换
  • 四、Pandas实现文本拼接
    • 1. string.cat()
      • 1)默认拼接
      • 2)指定符号
      • 3)指定空值
      • 4)连接列表
  • 五、Panda实现正则提取
    • 1. str.match()
    • 2. str.findall()
    • 3. str.extract() 重要!!!
    • 4. str.extractall()
  • 六、Pandas实现文本虚拟变量
    • 1. str.get_dummies
      • 1)默认情况
      • 2)指定分隔符

每篇前言

  • 🏆🏆作者介绍:Python领域优质创作者、华为云享专家、阿里云专家博主、2021年CSDN博客新星Top6

  • 🔥🔥本文已收录于Python全栈系列专栏:《100天精通Python从入门到就业》
  • 📝​📝​此专栏文章是专门针对Python零基础小白所准备的一套完整教学,从0到100的不断进阶深入的学习,各知识点环环相扣
  • 🎉🎉订阅专栏后续可以阅读Python从入门到就业100篇文章还可私聊进千人Python全栈交流群(手把手教学,问题解答); 进群可领取80GPython全栈教程视频 + 300本计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
  • 🚀🚀加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!

在这里插入图片描述
在这里插入图片描述

本文是上篇的补充,基础不会的小伙伴请看上文:100天精通Python(数据分析篇)——第71天:Pandas文本数据处理方法之str/object类型转换、大小写转换、文本对齐、获取长度、出现次数、编码

一、Python字符串内置方法

1. 文本查找

方法说明
string.startswith(str)检查字符串是否是以 str 开头,是则返回 True
string.endswith(str)检查字符串是否是以 str 结束,是则返回 True
string.index(str, start=0, end=len(string))跟 find() 方法类似,不过如果 str 不在 string 会报错
string.rindex(str, start=0, end=len(string))类似于 index(),不过是从右边开始
string.find(str, start=0, end=len(string))检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1
string.rfind(str, start=0, end=len(string))类似于 find(),不过是从右边开始查找
string.contains(str)检测是否包含指定字符串,返回TRUE或者FALSE,常用于数据筛选中

2. 文本替换

方法说明
string.replace(old_str, new_str, num=string.count(old))把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次

3. 文本拼接

方法说明
string.cat()将一个序列的内容进行拼接,默认情况下会忽略缺失值,我们亦可指定缺失值

4. 正则提取

方法说明
re.match()尝试从字符串的起始位置匹配一个模式
re.findall()返回所有查询到的值

二、Pandas实现文本查找

方法说明
ser_obj.str.startswith(str)检查字符串是否是以 str 开头,是则返回 True
ser_obj.str.endswith(str)检查字符串是否是以 str 结束,是则返回 True
ser_obj.str.index(str, start=0, end=len(string))跟 find() 方法类似,不过如果 str 不在 string 会报错
ser_obj.str.rindex(str, start=0, end=len(string))类似于 index(),不过是从右边开始
ser_obj.str.find(str, start=0, end=len(string))检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1
ser_obj.str.rfind(str, start=0, end=len(string))类似于 find(),不过是从右边开始查找
ser_obj.str.findall()返回查询到的值
ser_obj.str.contains()检测是否包含指定字符串,返回TRUE或者FALSE,常用于数据筛选中

1. str.startswith(字符串)

检查字符串是否是以 某字符串 开头,是则返回 True。

import pandas as pd
import numpy as np

data = [1, 'A', 'Ab', 'a', 'ab', None, np.NaN]
ser_obj = pd.Series(data)
print(ser_obj)
print(ser_obj.str.startswith('a'))  # 是否以a开头

运行结果:
在这里插入图片描述

2. str.endswith(字符串)

检查字符串是否是以 某字符串 结束,是则返回 True

import pandas as pd
import numpy as np

data = [1, 'A', 'Ab', 'a', 'ab', None, np.NaN]
ser_obj = pd.Series(data)
print(ser_obj)
print(ser_obj.str.endswith('b'))  # 是否以b结尾

运行结果:
在这里插入图片描述

3. str.index(字符串, start=0, end=len(string))

跟 find() 方法类似,不过如果 字符串不在 string 会报错

import pandas as pd
import numpy as np

data = ['bc', 'Abc', 'ab','aaaab']
ser_obj = pd.Series(data)
print(ser_obj)
print(ser_obj.str.index('b', start=0))

运行结果:
在这里插入图片描述

4. str.rindex(字符串, start=0, end=len(string))

类似于 index(),不过是从右边开始

import pandas as pd
import numpy as np

data = ['bc', 'Abc', 'ab', 'aaaab']
ser_obj = pd.Series(data)
print(ser_obj)
print(ser_obj.str.rindex('b'))

运行结果,不知道还是和index一样:
在这里插入图片描述

5. str.find(字符串, start=0, end=len(string))

检测 某字符串 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1

import pandas as pd
import numpy as np

data = [1, 'A', 'Abc', 'a', 'ab', None, np.NaN]
ser_obj = pd.Series(data)
print(ser_obj)
print(ser_obj.str.find('b', start=0, end=len('abc')))  

运行结果:

在这里插入图片描述

6. str.rfind(字符串, start=0, end=len(string))

类似于 find(),不过是从右边开始查找

import pandas as pd
import numpy as np

data = [1, 'A', 'Abc', 'a', 'ab', None, np.NaN]
ser_obj = pd.Series(data)
print(ser_obj)
print(ser_obj.str.rfind('b', start=0))

运行结果:
在这里插入图片描述

8. str.contains(字符串)

检测是否包含指定字符串,返回TRUE或者FALSE,常用于数据筛选中

import pandas as pd
import numpy as np

data = ['abc', 'aac', ' a ', 'ccc', 'bbb', 1, np.NaN, None]
ser_obj = pd.Series(data)
print(ser_obj)
print(ser_obj.str.contains('a'))

运行结果:
在这里插入图片描述

三、Panda实现文本替换

1. str.replace(old_str, new_str)

把 string 中的 old_str 替换成 new_str

1)普通替换

import pandas as pd
import numpy as np

data = ['abc', 'aac', 'aaac', 'aaaab']
ser_obj = pd.Series(data)
print(ser_obj)
print(ser_obj.str.replace('a', 'A'))  # 把小a替换为大A

运行结果:
在这里插入图片描述

2)正则替换

replace方法中还可以用正则语法,需要加上regex=True参数

import pandas as pd
import numpy as np

data = ['abc', 'aac', 'aaac', 'aaaab']
ser_obj = pd.Series(data)
print(ser_obj)
print(ser_obj.str.replace('a|b|c', 'A', regex=True))  # 把全部替换为大A

运行结果:
在这里插入图片描述

四、Pandas实现文本拼接

1. string.cat()

将一个序列的内容进行拼接,默认情况下会忽略缺失值,我们亦可指定缺失值

1)默认拼接

import pandas as pd
import numpy as np

data = ['abc', 'aac', ' a ', 'ccc', 'bbb', 1, np.NaN, None]
ser_obj = pd.Series(data, dtype='string')
print(ser_obj)
print(ser_obj.str.cat())

运行结果:
在这里插入图片描述

2)指定符号

设置 sep 参数指定符号进行拼接

import pandas as pd
import numpy as np

data = ['abc', 'aac', ' a ', 'ccc', 'bbb', 1, np.NaN, None]
ser_obj = pd.Series(data, dtype='string')
print(ser_obj)
print(ser_obj.str.cat(sep='-'))

运行结果:
在这里插入图片描述

3)指定空值

设置 na_rep 参数指定缺失值填充

import pandas as pd
import numpy as np

data = ['abc', 'aac', ' a ', 'ccc', 'bbb', 1, np.NaN, None]
ser_obj = pd.Series(data, dtype='string')
print(ser_obj)
print(ser_obj.str.cat(na_rep='空值'))

运行结果:

在这里插入图片描述

4)连接列表

连接一个序列和另一个等长的列表,默认情况下如果有缺失值,则会导致结果中也有缺失值,不过可以通过指定缺失值na_rep的情况进行处理

import pandas as pd
import numpy as np

data = ['abc', 'aac', ' a ', 'ccc', 'bbb', 1, np.NaN, None]
ser_obj = pd.Series(data, dtype='string')
print(ser_obj)
print(ser_obj.str.cat(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], na_rep='空值'))

运行结果:
在这里插入图片描述

五、Panda实现正则提取

1. str.match()

尝试从字符串的起始位置匹配一个模式,返回TRUE或者FALSE

import pandas as pd
import numpy as np

data = ['abc', 'aac', ' a ', 'ccc', 'bbb', 1, np.NaN, None]
ser_obj = pd.Series(data, dtype='string')
print(ser_obj)
print(ser_obj.str.match('^a'))  # 匹配以a开头的内容

运行结果:
在这里插入图片描述

2. str.findall()

返回所有查询到的值,返回的是一个列表

import pandas as pd
import numpy as np

data = ['abc', 'aac', 'aaac', 'aaaab']
ser_obj = pd.Series(data)
print(ser_obj)
print(ser_obj.str.findall('[ab]'))  # 匹配包含字母a或者b

运行结果:

在这里插入图片描述

3. str.extract() 重要!!!

我们在日常中经常遇到需要提取某序列文本中特定的字符串,这个时候采用str.extract()方法就可以很好的进行处理,它是用正则表达式将文本中满足要求的数据提取出来形成单独的列。注意:仅返回匹配到的首个字符串!!!

0.23版本之前expand默认为FALSE:

  • expand=Fasle时如果返回结果是一列则为Series,否则是Dataframe。
  • expand=True返回一个数据帧
import pandas as pd
import numpy as np

data = ['a1', 'b2', 'c3', 'c3c3', 1, np.NaN, None]
ser_obj = pd.Series(data, dtype='string')
print(ser_obj)
print(ser_obj.str.extract('([a-z])(\d)'))  # 用正则表达式将文本分为两部分,第一部分是字母a和b,第二部分匹配数字

运行结果:
在这里插入图片描述

4. str.extractall()

与extracta()用法相似,区别是:

  • extracta:仅返回匹配到的首个字符串
  • extractall:会提取全部匹配项,会将一个文本中所有符合规则的内容匹配出来,最后形成一个多层索引数据
import pandas as pd
import numpy as np

data = ['a1', 'b2', 'c3', 'c3c3', 1, np.NaN, None]
ser_obj = pd.Series(data, dtype='string')
print(ser_obj)
print(ser_obj.str.extractall('([a-z])(\d)'))  # 用正则表达式将文本分为两部分,第一部分是字母a和b,第二部分匹配数字

运行结果:
在这里插入图片描述

六、Pandas实现文本虚拟变量

get_dummies可以将一个列变量自动生成虚拟变量,这种方法在特征衍生中经常使用。

1. str.get_dummies

1)默认情况

import pandas as pd
import numpy as np

data = ['小明', '小红', '小张', '小白']
ser_obj = pd.Series(data, dtype='string')
print(ser_obj)
print(ser_obj.str.get_dummies())

运行结果:
在这里插入图片描述

2)指定分隔符

设置 sep 参数可以指定分隔符

import pandas as pd
import numpy as np

data = ["A", "A|B", "A|B|C", 1, np.nan, None]
ser_obj = pd.Series(data, dtype='string')
print(ser_obj)
print(ser_obj.str.get_dummies(sep="|"))

运行结果:第一行1ABC只有A,第二行有A和B,第三行都ABC都有,第四行有1,剩下的行数都没了

在这里插入图片描述

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

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

相关文章

工具技巧和读文档 | 读函数式编程接口文档 | 匿名内部类 | lambda表达式 |IDEA

Function接口,函数式接口 按入参返回值分类,大概分为4种类型,再加上多个入参就又多了Bi开头的两种。 有CtrlP的时候不懂参数列表该写啥,就先CtrlALT看下入参类型的相关实现类! 一些实用的快捷键:Ctrl P看参…

AORT:一款功能强大的多合一网络侦查与数据收集工具

关于AORT AORT是一款功能强大的多合一网络侦查与数据收集工具,该工具的主要目的是帮助漏洞Hunter和渗透测试人员完成网络侦查环节的各类任务。AORT基于Python开发,使用起来非常简单且方便,并且支持跨平台(只要安装了Python 3即可…

怒删虚拟机,FPGA开发新宠-几步在Windows上安装桌面化Linux

Linux上运行Vivado这类EDA工具要比Window上快很多,大概就是优化的问题,所以选择Linux上开发是一个比较好的选择(主要是免费)。国内习惯了Win系统,所以用Linux比较少,那么有没有既可以在Windows上做一些文档…

Python爬虫(4)-Selenium模拟鼠标操作

在Selenium4.2以后的版本里面鼠标的操作方法都封装在了ActionChains中需要时直接取即可。 1.鼠标双击 使用方法就是调用ActionChains然后传入你需要点击的按钮的位置即可 ActionChains(driver).double_click(f1).perform() perform()的意思就是执行所有ActionChains中的动作 …

python字典应用

python字典应用 文章目录python字典应用一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤字典的综合案例使用collections模块的defaultdict类来实现创建字典。拓展知识一:内置函数globals()和locals()拓展知识二:有序字典 collections.Ord…

如何使用MyBatis简化JDBC开发?MyBatis持久层框架快速入门

文章目录1. 前言2. JDBC 存在的缺点3. MyBatis 优化4. MyBatis 快速入门5. 总结Java编程基础教程系列1. 前言 JavaEE 企业级 Java 项目中的经典三层架构为表现层,业务层和持久层,使用Java 代码操作数据库属于持久层内容,而 MyBatis 对 JDBC …

Multus k8s网络浅谈

Multus是什么 k8s不提供网络解决方案,提供CNI ( Container Networking Interface )规范,被CNI插件遵守(Flannel, Calico,Multus等,这些是网络方案) Multus 提供了将多个接口添加到pod的功能 Flannel 为每…

实现自己的数据库三

一 前言上篇实现了数据库的持久化,就是一个质的飞跃,虽然代码不复杂,但是对没有这方面经验者来说,还是意思的,下一步就是要完成另外一个飞跃,将存储的数据结构采用B树的形式来保存。在改造之前,…

为什么要设计非公平锁?

背景 公平:排队 非公平:在合适时机插队 非公平还是 ReentrantLock 的默认策略,排队时间不浪费了? 场景 来看这种场景 假如A持有一把锁,B请求这把锁,这时候B被挂起进入阻塞,A释放锁的时候&a…

点与线段的关系

点与线段的关系 对于向量a(x1,y1)和b(x2,y2) 点乘的数学意义:a * b x1x2 y1y2 点乘的几何意义:a * b |a||b|cosQ 这个可以看成是投影关系表达式:cosQ a * b / ( |a||b|) 令r cosQ; 求p点和线段AB的位置关系,可以…

将字符串根据指定的分隔符拆分为元组str.partition()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将字符串根据指定的分隔符拆分为元组 str.partition() 选择题 对于以下python代码最后输出的结果是? string "I Love Python" print("【显示】string.partition(Love)"…

Unity3d 微信小程序(小游戏)项目实现流量主接入功能(含源码)

前言 很早之前编写了Unity导出微信小游戏的博客,也尝试自己做了个Demo上线了,基本没更新过,不过几个月的时间,用户超过了一千,可以开通流量主了,大概率是因为上篇的帖子浏览量大了,扫码体验的人…

Aurora、Chip2chip、Ethernet(二)

摘要:Aurora、Chip2chip、Ethernet共用一个gt时钟的正确的解决方案以及在实际实现以及在实现过程中遇到的其它的问题。 我在实际中遇到的困难如下: 现在需要将三个ip共用一对GT时钟,一个Ethernet IP,一个Ethernet IP&#xff08…

每日学术速递1.29

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1. Compact Transformer Tracker with Correlative Masked Modeling 标题:带有相关掩码建模的紧凑型变压器跟踪器 作者: Zikai Song, Run Luo, Junqing Yu, Y…

GLM国产大模型训练加速:性能最高提升3倍,显存节省1/3,低成本上手

作者|BBuf、谢子鹏、冯文 2017 年,Google 提出了 Transformer 架构,随后 BERT 、GPT、T5等预训练模型不断涌现,并在各项任务中都不断刷新 SOTA 纪录。去年,清华提出了 GLM 模型(https://github.com/THUDM…

一句话说明线程和进程

知识点: 1、一句话说明线程和进程 2、操作系统为什么需要进程 3、为什么要引入线程 4、一图说明线程和进程的关系 一、一句话说明线程和进程 进程:是指⼀个内存中运⾏的应⽤程序,比如QQ、微信、浏览器等;⼀个应⽤程序可以同时运⾏…

CAS 和 Synchronized优化过程以及常见的锁策略

目录 🐑今日良言:追星赶月莫停留,平芜尽处是春山 🐂一、锁策略 🐼二、CAS 🐭三、Synchronized 🐑今日良言:追星赶月莫停留,平芜尽处是春山 🐂一、锁策略 锁策略是实现锁的时候,考虑出现锁竞争了该怎么…

电驱系统电磁兼容基础知识及测试方法

电驱系统电磁兼容基础知识及测试方法 学习参考:驱动视界公众号、百度百科、《电动汽车电机驱动系统EMC研究综述》 1.背景 2.电磁干扰三要素 3.电波暗室与屏蔽室的原理 4.测试方法 5.如何看测试数据 6.工作中需要注意的EMC的几点问题 7.案例 1.背景 汽车工业发展…

docker安装db2

第一步:下载镜像 docker pull ibmcom/db2express-c:latest备注:docker images -a 可以查看已安装镜像; 第二步:启动镜像 docker run -d --name db2 -p 50000:50000 -e DB2INST1_PASSWORD[数据库密码] -e LICENSEaccept ibmcom…

玩转PPT 第1节 PPT制作理念学习笔记

ppt神器islide 第1节 初步接触强大的工具1 PPT大神的课程总结1.1 骨架篇1.2 色彩篇1.3 对齐篇1.4 对比篇1.5 修饰篇1.6 字体篇1.7 素材篇1.8 线条篇1.8.1 可以随意画线条,填充空白1.8.2 在字体上画线条,做成艺术字1.8.3 做对称线条,比如递进三…