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

Python使用re.split多分隔符拆分Pandas列时报TypeError如何解决?

问题解决:pandas中按多分隔符拆分字符串列报错的处理

报错原因

  • re.split()仅支持传入单个字符串/字节类对象作为拆分目标,你传入的df['Sport']是pandas Series类型(包含多行字符串的序列),哪怕列元素是string类型,整个Series本身也不符合re.split()的入参要求,因此触发类型错误。
  • 你使用的正则表达式r';,'逻辑错误,该表达式匹配的是连续的分号+逗号组合,并非你需要的「分号或逗号作为分隔符」的需求,正确的正则规则应为r'[;,]',方括号代表匹配其中任意一个字符。

正确解决方案

推荐直接使用pandas内置的字符串拆分方法str.split(),原生支持Series批量处理,无需手动遍历:

场景1:拆分结果存为单列列表

如果需要把每个字符串拆分后的结果以列表形式存在单列中:

import numpy as np
import pandas as pd
import re

df = pd.read_excel(r'Filepath\sports.xlsx',sheet_name = 'data')
df[['Name','Sport']] = df[['Name','Sport']].astype('string')
# 拆分Sport列,结果存为列表到A列
df['A'] = df['Sport'].str.split(r'[;,]')
print(df)

输出结果示例:

NameSportA
JohnFootball;NBA,Tennis[Football, NBA, Tennis]
MarySquash,Tetris;MMA[Squash, Tetris, MMA]
ScottCricket,Tennis[Cricket, Tennis]
KimRugby,WNBA;Footy[Rugby, WNBA, Footy]

场景2:拆分结果展开为多列

如果需要把拆分后的每个元素单独作为一列,添加expand=True参数即可:

# 拆分后自动扩展为3列,对应每个运动项目
df[['sport_1', 'sport_2', 'sport_3']] = df['Sport'].str.split(r'[;,]', expand=True)
print(df)

输出结果示例:

NameSportsport_1sport_2sport_3
JohnFootball;NBA,TennisFootballNBATennis
MarySquash,Tetris;MMASquashTetrisMMA
ScottCricket,TennisCricketTennis
KimRugby,WNBA;FootyRugbyWNBAFooty

补充:如果一定要使用re.split实现

需要通过apply对Series的每个元素单独调用re.split():

df['A'] = df['Sport'].apply(lambda x: re.split(r'[;,]', x))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:36:04