Pandas使用str.contains匹配后批量替换列值的实现方案
实现方案
核心采用pandas.Series.str.extract()矢量化正则提取方法,全程无循环,适配十万/百万级大规模数据处理,性能远高于逐行匹配方案。
完整可运行代码
import pandas as pd import re # 加载测试数据 poke = pd.DataFrame({ 'index': {1: 2.0, 2: 3.0, 3: 4.0, 5: 8.0, 6: 12.0}, 'data_values': {1: 'charizard ex', 2: 'poliwhirl', 3: 'blastoise', 5: "blaine's arcanine", 6: 'ariados'}, 'price2': {1: 980.88, 2: 20.0, 3: 998.98, 5: 45.0, 6: 6.3} }) # 定义匹配关键词列表 keywords = ["charizard", "poliwhirl", "blastoise", "arcanine", "ariados"] # 构造正则捕获组,自动转义关键词中的特殊正则字符避免匹配错误 pattern = f'({"|".join(re.escape(k) for k in keywords)})' # 提取匹配到的关键词,覆盖原列(如果需要保留原列可赋值给新列) poke['data_values'] = poke['data_values'].str.extract(pattern, expand=False) print(poke)
输出结果
index data_values price2 1 2.0 charizard 980.88 2 3.0 poliwhirl 20.00 3 4.0 blastoise 998.98 5 8.0 arcanine 45.00 6 12.0 ariados 6.30
注意事项
- 若存在未匹配到任何关键词的行,提取结果会返回
NaN,如果需要保留原值可提前备份原列,补充代码:poke['data_values'] = poke['data_values'].fillna(poke['备份的原data_values列名']) - 该方案为纯矢量化操作,100万行数据处理耗时仅需数百毫秒,无需额外优化即可满足大规模数据处理需求
内容的提问来源于stack exchange,提问作者me.limes
相关产品推荐
相关产品推荐

