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

Pandas拆分含多行文本的列时遇长度不匹配错误求解决

Pandas拆分带多行文本的Desc列报错解决

问题场景

Pandas数据集的Desc列包含不定行数的多行文本,要把该列拆成两列:普通文本列Desc,以及特殊符号(@、())开头的内容列Ret。执行拆分代码时触发Columns must be same length as key错误。

原始数据

================================
    It        |        Desc
================================
0   coat      |      Bos @Target@                                                                 
                     B2 @Sfop re@
1   boots     |      Wos (DSW)
================================

报错代码

import pandas as pd
# 创建数据集
item = ['coat','boots']
dec = ["Bos @Target@\n  B2 @Sfop re@", "Wos (DSW)"]
df = pd.DataFrame(item, columns=['It'])
df['Desc'] = dec
print(df)
# 报错的拆分代码
df[["Desc", "Ret"]] = df["Desc"].str.findall("\w+").apply(pd.Series)

错误原因

  1. 正则\w+只能匹配纯字母数字的单词,直接过滤掉了带特殊符号的目标内容(比如@Target@、(DSW));
  2. 拆分后的数据长度不一致:coat对应的Desc拆分后有4个元素,boots只有2个,强行赋值给固定的两列时,列长度与拆分结果不匹配,触发报错;
  3. 没有处理Desc里的多行文本,原代码直接对整个单元格内容拆分,不符合每行拆分的需求。

解决代码

import pandas as pd

# 构建原始数据集
item = ['coat','boots']
dec = ["Bos @Target@\n  B2 @Sfop re@", "Wos (DSW)"]
df = pd.DataFrame(item, columns=['It'])
df['Desc'] = dec

# 1. 把Desc中的多行文本拆成单独行,保留原索引
df_expanded = df.assign(Desc=df['Desc'].str.split('\n')).explode('Desc')
# 去除每行首尾空格
df_expanded['Desc'] = df_expanded['Desc'].str.strip()

# 2. 用正则拆分每行:匹配「普通单词 + 特殊符号开头的内容」
split_result = df_expanded['Desc'].str.extract(r'^(\w+)\s+([@(].*?[@)])$', expand=True)
split_result.columns = ['Desc', 'Ret']

# 3. 合并得到最终结果
df_final = pd.concat([df_expanded['It'], split_result], axis=1)
print(df_final)

最终输出

It Desc        Ret
0  coat  Bos    @Target@
0  coat   B2  @Sfop re@
1 boots  Wos      (DSW)

如果需要保持原多行的视觉展示格式,可以通过groupby进一步处理,但上述结果是结构化的标准格式,更适合后续数据操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:12:47