如何提取pandas字符串列的前导分数并去除无关后缀内容
解决pandas字符串列提取开头分数的问题
你之前使用的rstrip方法无法实现需求,原因是rstrip的入参是待删除的字符集合,而非正则匹配规则:你传入的' .*'只会删除字符串末尾的空格、点、星号三类字符,无法匹配+、字母、括号等需要移除的后缀内容。
最优实现方案
直接使用pandas内置的矢量化字符串正则提取方法str.extract(),不需要通过apply遍历,执行效率更高:
# 提取开头的「数字/数字」格式分数,再去重 result = df['colname'].str.extract(r'^(\d+/\d+)', expand=False).unique()
正则规则说明
^:锚定匹配字符串的开头,确保只抓取最靠前的分数部分\d+:匹配1个及以上的数字/:匹配分数中间的斜杠- 括号
():标记我们需要提取的捕获组 expand=False:指定返回Series而非DataFrame,方便后续直接调用unique()去重
对你给出的测试样本执行以上代码,输出结果和你预期完全一致:['20/25' '9/200' '20/50' '20/30' '20/60' '20/20' '20/70']
内容的提问来源于stack exchange,提问作者Kaihua Hou
相关产品推荐
相关产品推荐

