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)
输出结果示例:
| Name | Sport | A |
|---|---|---|
| John | Football;NBA,Tennis | [Football, NBA, Tennis] |
| Mary | Squash,Tetris;MMA | [Squash, Tetris, MMA] |
| Scott | Cricket,Tennis | [Cricket, Tennis] |
| Kim | Rugby,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)
输出结果示例:
| Name | Sport | sport_1 | sport_2 | sport_3 |
|---|---|---|---|---|
| John | Football;NBA,Tennis | Football | NBA | Tennis |
| Mary | Squash,Tetris;MMA | Squash | Tetris | MMA |
| Scott | Cricket,Tennis | Cricket | Tennis | |
| Kim | Rugby,WNBA;Footy | Rugby | WNBA | Footy |
补充:如果一定要使用re.split实现
需要通过apply对Series的每个元素单独调用re.split():
df['A'] = df['Sport'].apply(lambda x: re.split(r'[;,]', x))
内容的提问来源于stack exchange,提问作者Rogue258
相关产品推荐
相关产品推荐

