如何通过正则表达式修改并拆分Pandas DataFrame指定列?
当然可以!这事儿在Pandas里用正则表达式处理起来超顺手,我给你两种实用的实现方式:
方法一:使用
str.extract(最推荐的正则提取方式) str.extract专门用来从字符串中提取正则匹配的分组,刚好适配你的需求。我们可以写一个正则表达式精准捕获"via"之前和"on"之后的内容:
import pandas as pd # 构造你的示例DataFrame data = { 'status_details': [ 'Other via Other on 17 Jan 2019', 'Other via Other on 17 Jan 2019', 'Interview via E-mail on 14 Dec 2018', 'Rejected via E-mail on 15 Jan 2019', 'Rejected via E-mail on 15 Jan 2019', 'Rejected via E-mail on 15 Jan 2019', 'Rejected via E-mail on 15 Jan 2019', 'Interview via E-mail on 14 Jan 2019', 'Rejected via Website on 12 Jan 2019' ] } df = pd.DataFrame(data) # 用正则提取拆分出两列 df[['status', 'date']] = df['status_details'].str.extract(r'^(.*?) via .*? on (.*)$') # 查看处理后的结果 print(df)
正则表达式说明:
^:匹配字符串的开头(.*?):非贪婪模式匹配任意字符,直到遇到" via ",这部分就是我们要的第一列状态内容via .*? on:匹配中间不需要的冗余部分("via"到"on"之间的内容)(.*)$:匹配"on "之后的所有内容直到字符串结尾,作为第二列的日期信息
方法二:用
str.split分步拆分(更直观的替代方案) 如果你觉得正则表达式有点抽象,也可以用str.split结合正则分隔符分步处理,通过限制拆分次数避免意外:
# 提取"via"之前的状态内容 df['status'] = df['status_details'].str.split(r' via ', n=1).str[0] # 提取"on"之后的日期内容 df['date'] = df['status_details'].str.split(r' on ', n=1).str[1]
说明:
n=1参数确保只在第一个匹配到的分隔符处拆分,防止字符串中间出现重复的"via"或"on"导致拆分错误。
注意:如果你的DataFrame里存在格式不符合的行(比如缺少"via"或"on"关键字),拆分后的新列会出现NaN值,你可以根据需求用df.dropna(subset=['status', 'date'])删除这些异常行,或者提前做格式校验。
内容的提问来源于stack exchange,提问作者Louie Lee
相关产品推荐
相关产品推荐

