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

Pandas用str.split生成DataFrame时列数不匹配报错如何解决?

错误原因
  • 你的Splitter_Name列中新增了不包含SPL子串的脏数据:str.split('SPL',1)遇到无匹配子串的值时,只会返回长度为1的列表,不会拆分为两个元素。此前所有数据都包含SPL所以能正常运行,当出现不匹配的行后,最终生成的列表集合里同时存在长度为1和长度为2的元素,你指定了2个列名但部分行只有1个值,就触发了该断言错误。
  • 补充说明:如果该列存在空值(NaN),也会导致拆分后返回长度为1的列表,触发同样的报错。
解决方法

方案1:使用split自带的expand参数直接生成DataFrame

str.split的expand参数会直接返回对齐后的DataFrame,拆分失败的位置自动填充为NaN,无需手动转列表再构造,是最高效的解决方式:

# 拆分后直接指定列名
fe_split = fe.Splitter_Name.str.split('SPL', 1, expand=True)
fe_split.columns = ['splitter', 'number']

如果不需要保留拆分失败的行,直接过滤空值即可:

fe_split = fe_split.dropna(subset=['number'])

方案2:提前过滤不符合格式的行

如果要保证拆分结果100%符合预期,先筛选出包含SPL的行再执行拆分,同时可以单独捞取异常数据排查:

# 筛选符合格式的行,na=False表示空值也判定为不符合规则
fe_valid = fe[fe.Splitter_Name.str.contains('SPL', na=False)]
# 执行拆分
fe_split = pd.DataFrame(fe_valid.Splitter_Name.str.split('SPL', 1).tolist(), columns=['splitter', 'number'])

# 可选:导出脏数据排查原因
bad_data = fe[~fe.Splitter_Name.str.contains('SPL', na=False)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:24:07