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

如何使用Pandas将含表头标识的多行文本列拆分为多列

拆分Pandas多行文本列为Name/Address/Hobbies独立字段

步骤1:构造测试数据

先模拟包含目标多行文本的stud_info列:

import pandas as pd
import re

data = {
    'stud_info': [
        """Name: Mark
Address: 
PHX, AZ
Hobbies: 
1. Football
2. Programming
3. Squash""",
        """Name: Lisa
Address: 
NYC, NY
Hobbies: 
1. Reading
2. Painting"""
    ]
}
df = pd.DataFrame(data)

步骤2:正则提取字段

利用str.extract结合正则表达式,跳过标识文本直接捕获目标内容:

# 正则规则:精准匹配每个标识后的内容,忽略"Name:"/"Address:"/"Hobbies:"这些前缀
df[['Name', 'Address', 'Hobbies']] = df['stud_info'].str.extract(
    r'Name:\s*(.*?)\nAddress:\s*(.*?)\nHobbies:\s*(.*)',
    flags=re.DOTALL
)
  • re.DOTALL参数让正则中的.可以匹配换行符,支持捕获跨多行的内容
  • 非贪婪模式.*?确保只捕获到下一个标识前的内容,避免匹配溢出

步骤3:清理字段格式

对提取后的字段做空白和换行符处理,按需调整输出格式:

# 清理Name和Address的多余空白
df['Name'] = df['Name'].str.strip()
df['Address'] = df['Address'].str.strip()

# 可选:将Hobbies的多行条目转为逗号分隔字符串
df['Hobbies'] = df['Hobbies'].str.strip().str.replace('\n', ', ')

# 可选:将Hobbies转为去掉序号的列表格式
df['Hobbies'] = df['Hobbies'].str.strip().str.split('\n').apply(
    lambda x: [item.split('. ')[-1].strip() for item in x if item.strip()]
)

最终效果

处理后的数据框会新增Name、Address、Hobbies三列,列值完全不包含原始的标识文本,格式整洁可用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:30:47