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

如何从Pandas Series中提取指定尺码子串?求助解决提取失败问题

解决从Series中提取S/M/L/XL尺码的问题

我明白你被困在这件事上好几个小时有多闹心,咱们一起来搞定它!先看看你之前的方法为啥没生效,再给你靠谱的解决方案。

为啥你的两种方法没成功?

  • 第一种列表推导式:你用了if i in sizes,但这只有当size_col里的元素完全等于S/M/L/XL时才会匹配。但从你第二种方法的split操作来看,你的元素应该是类似"XXL / L"或者"T-Shirt - M"这种包含尺码的长字符串,所以直接匹配肯定找不到。
  • 第二种分支循环:你靠长度判断和固定分隔符(/或-)来提取,但这种方法太依赖固定格式——如果有的元素格式不统一(比如没有分隔符、分隔符是其他符号,或者长度判断错了),提取结果就会出错。

更靠谱的解决方案:用正则表达式精准提取

因为尺码都是固定的大写字母(S/M/L/XL),用正则表达式可以精准定位这些字符,不管元素的其他格式是什么。这里用pandas的字符串处理方法,比循环高效得多(毕竟你有887个元素):

情况1:每个元素只包含一个尺码

import pandas as pd
import re

# 定义匹配尺码的正则:匹配独立的S/M/L/XL,避免误匹配XXL里的XL
size_pattern = r'\b(S|M|L|XL)\b'
# 从Series中提取匹配的尺码,dropna去掉没有匹配到的行
tshirt_sizes = size_col.str.extract(size_pattern, expand=False).dropna()

情况2:每个元素可能包含多个尺码(比如"S / M")

如果有的元素里有多个尺码,想要把它们都提取出来,可以用str.findall配合explode:

# 提取所有匹配的尺码,explode把列表拆成单独的元素行
tshirt_sizes = size_col.str.findall(size_pattern).explode().dropna()

小建议

如果还是有问题,先打印几个样本看看元素的真实格式:

print(size_col.head(10))

根据样本调整正则表达式,比如如果有的尺码前后有空格,正则可以改成r'\s*(S|M|L|XL)\s*',或者如果有小写的情况,加上忽略大小写标志re.IGNORECASE。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:50:51