Python正则表达式数据清洗全指南:高效文本处理与Pandas结合实战
off999 2025-05-24 16:02 32 浏览 0 评论
如果你是Linux或Mac用户,可能已经在命令行中使用过grep通过匹配模式来搜索文件。正则表达式(regex)允许你基于模式搜索、匹配并操作文本,这使得它们成为强大的文本处理和数据清洗工具。
在Python中,可以使用内置的re模块进行正则表达式匹配操作。在本教程中,我们将介绍如何利用正则表达式对数据进行清洗。我们会学习如何去除不需要的字符、提取特定模式、查找和替换文本等操作。
- 去除不需要的字符
在开始之前,先导入内置的re模块:
import re
字符串字段在分析前几乎总需要大量清洗。由于不同的数据格式,不需要的字符常常出现在数据中,令分析变得困难。正则表达式可以高效地帮助你去除这些字符。
你可以使用re模块中的sub()函数来替换或删除所有模式或特殊字符的出现。例如,假设你有包含电话号码、其中带有短横线和括号的字符串,可以这样去除它们:
text = "Contact info: (123)-456-7890 and 987-654-3210."
cleaned_text = re.sub(r'[()-]', '', text)
print(cleaned_text)
这里,re.sub(pattern, replacement, string)用于将字符串中所有匹配pattern的内容替换为replacement。我们使用r'[()-]'模式来匹配所有出现的(、)或-,得到输出:
输出结果:
Contact info: 1234567890 and 9876543210
- 提取特定模式
从文本字段中提取邮箱地址、URL或电话号码等常见且有用的信息,是数据清洗的常见任务。要提取所有感兴趣的特定模式,可以使用findall()函数。
比如,你可以这样从文本中提取邮箱地址:
text = "Please reach out to us at support@example.org or help@example.org."
emails = re.findall(r'\b[\w.-]+?@\w+?\.\w+?\b', text)
print(emails)
re.findall(pattern, string)会查找字符串中所有匹配pattern的内容,并以列表形式返回。这里我们用r'\b[\w.-]+?@\w+?\.\w+?\b'匹配所有邮箱地址:
输出结果:
['support@example.org', 'help@example.org']
- 替换模式
我们已经用sub()函数移除了不需要的特殊字符,但你也可以用它将某种模式替换成另一种内容,使字段更适合后续分析。
例如,移除多余的空格:
text = "Using regular expressions."
cleaned_text = re.sub(r'\s+', ' ', text)
print(cleaned_text)
r'\s+'用于匹配一个或多个空白字符,替换为单个空格,输出:
输出结果:
Using regular expressions.
- 验证数据格式
验证数据格式可以确保数据的一致性和正确性。正则表达式能用于验证邮箱、电话号码和日期等格式。
例如,使用match()函数验证邮箱地址:
email = "test@example.com"
if re.match(r'^\b[\w.-]+?@\w+?\.\w+?\b#39;, email):
print("Valid email")
else:
print("Invalid email")
在这个例子中,邮箱字符串是有效的:
输出结果:
Valid email
- 按模式分割字符串
有时你可能希望根据某种模式或特定分隔符,将一个字符串分割成多个字符串。可以使用split()函数来实现。
例如,将文本字符串按句子分割:
text = "This is sentence one. And this is sentence two! Is this sentence three?"
sentences = re.split(r'[.!?]', text)
print(sentences)
re.split(pattern, string)会在所有匹配pattern的位置将字符串拆分开。这里使用r'[.!?]'匹配句号、感叹号或问号:
输出结果:
['This is sentence one', ' And this is sentence two', ' Is this sentence three', '']
结合Pandas和正则表达式实现数据框清洗
将正则表达式与pandas结合,可以高效地对数据框进行清洗。
例如,移除姓名中的非字母字符,并验证邮箱地址:
import pandas as pd
data = {
'names': ['Alice123', 'Bob!@#', 'Charlie$#39;],
'emails': ['alice@example.com', 'bob_at_example.com', 'charlie@example.com']
}
df = pd.DataFrame(data)
# 移除姓名中的非字母字符
df['names'] = df['names'].str.replace(r'[^a-zA-Z]', '', regex=True)
# 验证邮箱地址
df['valid_email'] = df['emails'].apply(lambda x: bool(re.match(r'^\b[\w.-]+?@\w+?\.\w+?\b#39;, x)))
print(df)
上述代码中:
- df['names'].str.replace(pattern, replacement, regex=True)
- 用于将Series中所有匹配pattern的内容替换为replacement。
- lambda x: bool(re.match(pattern, x))
- 这个lambda函数应用正则匹配,并将结果转换为布尔值。
输出结果如下:
names | emails | valid_email | |
0 | Alice | alice@example.com | True |
1 | Bob | bob_at_example.com | False |
2 | Charlie | charlie@example.com | True |
总结
希望本教程对你有所帮助。让我们回顾一下所学内容:
- 使用re.sub去除不必要的字符,比如电话号码中的短横线和括号等。
- 使用re.findall从文本中提取特定模式。
- 使用re.sub替换模式,如将多个空格合并为一个空格。
- 使用re.match验证数据格式,确保数据符合特定格式(如验证邮箱地址)。
- 使用re.split按模式分割字符串。
- 实际应用中,可结合正则表达式和pandas高效清洗数据框中的文本字段。建议为你的正则表达式添加注释,说明其用途,以提升代码的可读性和可维护性。
想要了解更多关于pandas数据清洗的内容,可以阅读《7 Steps to Mastering Data Cleaning with Python and Pandas》。
相关推荐
- 如何在微软官网下载win10系统
-
从微软官网下载win10具体有以下7步:1、输入微软的官网,进入。2、登录自己的账号。3、一直往下拉,可以看到“获取win10”。4、选择要下载的版本。5、选择下载到你自己制定的文件夹,点击...
- 路由器地址怎么改(路由器地址怎么改成别的城市)
-
1、将本机电脑IP地址设置为自动获取。2、打开IE浏览器,在地址栏中输入192.168.1.1或192.168.0.1,在弹出的用户名和密码框中输入默认值,即admin/admin,如果修改过路由器使...
-
- 台式电脑怎么换显卡(台式电脑怎么换显卡视频)
-
1.准备好螺丝刀,拆箱之前我们的手先在周围找金属物品触摸下,释放静电,避免静电击坏电子元件。用螺丝刀拆下螺丝,取下盖子。2.用螺丝刀拆下锁住扩展卡的螺丝和挡片。3.双手各握住一方,用力均衡,然后慢慢地推出电脑显卡。4.之后即可成功取出电脑主...
-
2025-12-26 17:51 off999
- wifi连接上却不能访问互联网
-
原因一:路由器问题,可能路由器过热或者损坏;重启一下路由器试试,或者将路由器恢复一下出厂设置,然后重新拨号上网,并根据设置向导重新设置WiFi,或者更换新路由器再进行拨号连接上网。 原因二:可能宽带...
-
- 显卡驱动在哪里打开(显卡驱动设置在哪里)
-
1.以华硕x16、windows11、amd22.8.1为例。先进入电脑桌面,然后点击电脑开始菜单。2.找到“AMDRadeonsettings”点击展开。3.可以看到“AMDRadeonsettings”的主程序,点击打开。4.这...
-
2025-12-26 16:51 off999
- bios启动项里找不到固态硬盘
-
这个是BIOS设置问题,操作步骤不正确。需要在【启动】菜单中【硬盘BBS属性】中设置。下面提供一下完整的操作步骤,请参考:1、将装有固态硬盘的电脑重启,同时按键盘F2键。2、进入BIOS界面,在标题栏...
-
- 用手机解除路由器限速(用手机解除路由器限速教程)
-
1、设置wifi限速等功能时,需要打开路由器管理页面,所以先打开一个浏览器,在里面输入192.168.1.1,然后点击确定,再把路由器的密码输进去点击确定,原始账密在路由器的背面会有。2、打开wifi路由器的管理页面后,找到设备管理项点击它...
-
2025-12-26 15:51 off999
- 系统集成项目管理工程师报考
-
中级系统集成项目报考条件及费用如下:1、凡遵守中华人民共和国宪法和各项法律,恪守职业道德,具有一定计算机技术应用能力的人员,均可根据本人情况,报名参加相应专业类别、级别的考试。2、获准在中华人民共和国...
- 电脑显示内存不能为read(电脑显示内存不能为read怎样修改虚拟内存)
-
1内存不能为read可能是因为程序在读取数据时没有分配足够的内存空间。2解决方法可以是增加程序的内存分配,或者优化内存使用方式,例如使用缓存等技术。3此外,还可以通过检查代码逻辑是否有误,或者是...
- 网易用户中心官网(网易用户中心官网注册账号)
-
要登录网易个人中心的话,首先你网易要有自己的账户。你可以搜索一下网易的官方链接,打开以后先注册,注册成功了以后你就可以进到个人中心了,上面也可以做一些设置或修改你的密码之类的。然后你就可以多看一下,看...
- windows defender怎么关闭win11
-
1.启用或禁用WindowsDefender的实时保护可以通过设置打开或者关闭某些模块(例如实时保护)的选项。第一步,右键点击开始菜单--设置或者按住WIN+I(大写的i)快捷键...
- 无法识别硬盘(无法识别硬盘怎么解决)
-
1.有可能可以修复2.因为硬盘无法识别可能是由于硬盘本身的故障或者连接线松动等原因导致的,可以尝试更换连接线或者使用一些数据恢复软件进行修复。但是如果硬盘本身的故障比较严重,可能需要专业的数据恢复...
- win10固态硬盘如何分区(win10固态硬盘分区多大合适)
-
可以按照以下步骤进行分区。1.打开“此电脑”或“文件资源管理器”,右击“此电脑”,选择“管理”。2.在计算机管理窗口中,选择“磁盘管理”,找到你的固态硬盘。3.右击固态硬盘,选择“新建简单卷”。...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
