如何使用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
相关产品推荐
相关产品推荐

