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

基于预定义名单拆分Python DataFrame列为两列的方法

基于预定义姓名元组拆分DataFrame列的解决方案

嗨,我来帮你搞定这个问题!你说得没错,str.split()确实只支持单个字符串作为分隔符,没法直接传入你的姓名元组,但我们有两种实用的方法来实现你想要的列拆分:

方法一:正则表达式提取(高效推荐)

利用正则表达式的备选匹配特性,把你的姓名元组转换成正则模式,然后用str.extract()直接提取出姓名和剩余信息。这种方法效率很高,适合处理大数据集。

步骤如下:

  1. 构造匹配开头姓名的正则模式(用|分隔所有姓名,同时用re.escape()避免姓名里的特殊字符干扰匹配)
  2. 用str.extract()从Text列中提取两个分组:姓名和剩余信息

示例代码:

import re
import pandas as pd

# 你的原始DataFrame
df = pd.DataFrame({
    'Text': [
        'John Smith abc def ghi jkl',
        'Michael Smith abc def ghi jkl',
        'Liz Jones abc def ghi jkl'
    ]
})
names = ('John Smith','Michael Smith','Liz Jones')

# 构造正则匹配模式:匹配开头的姓名,然后匹配后续的所有内容
pattern = r'^(' + '|'.join(re.escape(name) for name in names) + r')\s+(.*)$'

# 提取并生成新列
df[['Name', 'Information']] = df['Text'].str.extract(pattern)

# 可选:删除原始的Text列
df = df.drop('Text', axis=1)

运行后你就能得到期望的结果:

Name       Information
0   John Smith  abc def ghi jkl
1  Michael Smith  abc def ghi jkl
2     Liz Jones  abc def ghi jkl

方法二:自定义函数+apply(直观易懂)

如果你觉得正则有点绕,可以用apply()结合自定义函数,逐个检查每条文本是否以某个姓名开头,找到后拆分。这种方法逻辑直观,适合小数据集或者需要自定义判断规则的场景。

示例代码:

import pandas as pd

df = pd.DataFrame({
    'Text': [
        'John Smith abc def ghi jkl',
        'Michael Smith abc def ghi jkl',
        'Liz Jones abc def ghi jkl'
    ]
})
names = ('John Smith','Michael Smith','Liz Jones')

# 自定义拆分函数
def split_by_name(text):
    for name in names:
        if text.startswith(name):
            # 跳过姓名后的空格,返回姓名和剩余内容
            return [name, text[len(name)+1:]]
    # 处理不匹配任何姓名的情况(可选)
    return [None, text]

# 应用函数并生成新列
df[['Name', 'Information']] = df['Text'].apply(split_by_name).apply(pd.Series)

# 可选:删除原始Text列
df = df.drop('Text', axis=1)

两种方法都能实现你的需求,你可以根据数据集大小和个人偏好选择~

内容的提问来源于stack exchange,提问作者SOK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:17:27