pandas如何从字符串列提取含空格的指定短语生成新列
错误原因
你原来的代码逻辑是先通过x.split()将Brand列的字符串按空格切割为独立的单个单词,再逐个判断这些单个单词是否存在于匹配列表中。而你匹配列表里的Honda Civic是包含空格的短语,不属于单个单词,自然不会出现在切割后的单词列表里,所以无法匹配到。
实现方案
推荐使用pandas内置的字符串正则匹配方法实现,性能比apply更优,也能直接支持多字符短语匹配:
- 先构造正则匹配模式,注意要按匹配短语的长度倒序排序,避免出现短短语先匹配、长短语无法匹配的问题(比如如果列表同时存在
Honda和Honda Civic,倒序排序后会优先匹配更长的Honda Civic) - 用
str.extract提取匹配结果即可,若需要匹配同一条目中的多个目标短语,可改用str.findall后拼接结果。
完整代码示例:
import pandas as pd # 原始数据 cars = {'Brand': ['Honda Civic 1998','2001 Toyota Corolla','99 Ford','2011 Audi']} df = pd.DataFrame(cars, columns = ['Brand']) mylist = ['Honda Civic','Ford','Audi'] # 构造正则匹配模式:按短语长度倒序排列,避免短匹配优先 pattern = '|'.join(sorted(mylist, key=len, reverse=True)) # 提取第一个匹配到的短语,无匹配则返回空值 df['words from list'] = df['Brand'].str.extract(f'({pattern})', expand=False) # 如果需要匹配同一条目中的多个短语,用以下代码替换上一行即可 # df['words from list'] = df['Brand'].str.findall(pattern).str.join(' ')
内容的提问来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

