You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过正则表达式修改并拆分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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:10:49