文科生自学Python-正则处理文本数据1.2

--人生不是赛场,梦想不容退场,学习编程成就更好的自己--

Python语言简洁生动,特别适合文科生学习入门IT世界,用几十行代码就能够做一个完整的爬虫脚本,开发效率杠杠的!短时间内即可解决工作和学习中碰到的各种棘手问题。(本人外语专业毕业,机缘巧合爱上编程,自学道路曲曲折折,痛并快乐!)在这里总结一下自学Python遇到的难点和重点,分享码过的代码和要点总结,希望能够给初学者一点启示和鼓励,同时愿意结交更多大神交流有助提升自己的水平。

上次介绍了如何使用正则表达式提取汉字和简单的数字,今天讲讲正则表达式在实际中的其他场景应用,对小白们来讲稍微有一点点难度和挑战,下面看具体案例:

表1:

文科生自学Python-正则处理文本数据1.2

表2:

文科生自学Python-正则处理文本数据1.2

任务:

1.在表1中提取Info字段中的手机号,QQ号和生日信息生成新的字段

2.利用表2性格信息替换表1中Personality字段对应信息并生成新的字段

看看如何利用正则表达式各个击破吧:

1.读取和检查数据:

文科生自学Python-正则处理文本数据1.2

2.利用正则表达式编写自定义函数-提取手机号码信息:

关键是构造特征表达式(r"d{11}|d{3}-d{8}"),主要运用了|字符表示”或”关系,在情况不复杂的时候可列举所有特征表达式,中间用|字符分隔即可。

文科生自学Python-正则处理文本数据1.2

3.利用正则表达式编写自定义函数-提取QQ号码信息:

QQ号码在这里相对固定,其模式总结起来也简单。

文科生自学Python-正则处理文本数据1.2

4.利用正则表达式编写自定义函数-提取生日信息:

关键是构造特征表达式(r"(d{4}[.|-|/]d{2}[.|-|/]d{2})|(d{2}[.|-|/]d{2}[.|-|/]d{4})"),这里使用了|字符,同时使用了[]字符表示在这个位置上有多种符号中某一种出现。

文科生自学Python-正则处理文本数据1.2

第一个任务顺利完成!!!接下来看看第二个任务:

1.读取表2数据并查看:

文科生自学Python-正则处理文本数据1.2

2.把两个字段分别装入两个列表中,代表替换者和被替换者:

在这使用了data["字段名"].astype(str).tolist()方法,目的为了后面进行全局暴力替换,这个小知识点一定要掌握,以后可以解决好多问题!!!

文科生自学Python-正则处理文本数据1.2

3.利用正则表达式通过replace方法进行替换得到新字段:

这里使用replace(list_replace,list_target,regex=True)方法,利用了之前生成的列表进行全局替换,感觉爽不爽!!!第二个任务轻松搞定!!!

文科生自学Python-正则处理文本数据1.2

代码汇总如下:

import pandas as pd
import re
import os
def Set_Work_Path(x):
    try:
        os.chdir(x)
        route = os.getcwd()
        return route
    except Exception:
        print("No Result")
work_path = r"E:DATA19AUG21"
Set_Work_Path(work_path)

data = pd.read_excel("DATA.xlsx",header=0,sheet_name="DATA",engine="openpyxl")
display(data)

def Get_Handy_Number(x):
    try:
        mode = re.compile(r"d{11}|d{3}-d{8}")
        return re.search(mode,x).group(0)
    except AttributeError:
        return ""
data["手机号码"] = data["Info"].apply(Get_Handy_Number)
display(data)

def Get_QQ_Number(x):
    try:
        mode = re.compile(r"QQd+")
        return re.search(mode,x).group(0)
    except AttributeError:
        return ""
data["QQ号码"] = data["Info"].apply(Get_QQ_Number)
display(data)

def Get_Birthdate(x):
    try:
        mode = re.compile(r"(d{4}[.|-|/]d{2}[.|-|/]d{2})|(d{2}[.|-|/]d{2}[.|-|/]d{4})")
        return re.search(mode,x).group(0)
    except AttributeError:
        return ""
data["生日日期"] = data["Info"].apply(Get_Birthdate)
display(data)

data_info = pd.read_excel("DATA.xlsx",header=0,sheet_name="INFO",engine="openpyxl")
display(data_info)

list_target = data_info["性格"].astype(str).tolist() #替换后的对象
display(list_target)

list_replace = data_info["Character"].astype(str).tolist() #需要替换的对象
display(list_replace)

data["个性特征"] = data["Personality"].replace(list_replace,list_target,regex=True)
display(data)

正则表达式就是香!!!大家赶紧上网搜搜正则表达式的基础知识,有空实操起来吧!!!

END

我为人人,人人为我!!欢迎大家关注,点赞和转发!!!

~~人生不是赛场,梦想不容退场~~不断努力学习蜕变出一个更好的自己,不断分享学习路上的收获和感悟帮助他人成就自己!!!

展开阅读全文

页面更新:2024-03-31

标签:正则   表达式   字段   手机号码   全局   赛场   函数   字符   特征   文本   性格   成就   号码   生日   代码   方法   数据   科技   信息

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top