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

如何拆分Pandas中多格式字符串列并转换为多行?

Pandas按多场景拆分字符串列为多行

问题分析

你的col X存在三种不同的格式:

  • 多行换行分隔的条目(如abc对应的col X)
  • 单行内用数字)分隔的条目(如abc2对应的col X)
  • 单行内用数字.分隔的条目(如abc3对应的col X)

原代码仅处理了换行拆分的场景,无法覆盖同一行内的多条目拆分,因此需要分两步处理所有格式。

解决方案

先构造示例DataFrame(模拟你的原始数据):

import pandas as pd

data = {
    'col A': ['abc', 'abc2', 'abc3', 'abc4'],
    'col B': ['xyz', 'xyz2', 'xyz3', 'xyz4'],
    'col X': [
        '1. hello\n2. hi\n3. bye',
        '1) bonjur 2) yalla',
        '1. single 2. line 3. format',
        '1. some_val'
    ]
}
df = pd.DataFrame(data)

步骤1:拆分换行并展开

先处理多行换行的情况,将每个换行条目拆分为单独行,并清理空白:

# 拆分换行符,展开单行
df = df.assign(col_X_split=df['col X'].str.split('\n')).explode('col_X_split')
# 清理字符串前后空白
df['col_X_split'] = df['col_X_split'].str.strip()
# 过滤空行
df = df[df['col_X_split'] != ''].reset_index(drop=True)

步骤2:拆分单行内的多条目

用正则表达式匹配数字.或数字)前的空白作为拆分点,拆分同一行内的多个条目:

# 正则匹配:空白+数字+(.或) 的位置,作为拆分边界
df = df.assign(col_X_final=df['col_X_split'].str.split(r'\s+(?=\d+[.)])')).explode('col_X_final')
# 再次清理空白
df['col_X_final'] = df['col_X_final'].str.strip()

步骤3:整理结果

保留目标列并重命名回原列名:

result = df[['col A', 'col B', 'col_X_final']].rename(columns={'col_X_final': 'col X'})
print(result)

最终输出

col A col B        col X
0   abc   xyz    1. hello
1   abc   xyz       2. hi
2   abc   xyz      3. bye
3  abc2  xyz2  1) bonjur
4  abc2  xyz2     2) yalla
5  abc3  xyz3  1. single
6  abc3  xyz3     2. line
7  abc3  xyz3    3. format
8  abc4  xyz4  1. some_val

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:40:07