Pandas如何基于address列内容删除branch_name列词汇并生成新列
Pandas 门店名称列清洗实现方案
现有示例 DataFrame 结构如下:
branch_name | address Mcdonald's - BGC | 2nd str. BGC Jollibee - Taguig | BGC, Taguig ...
需要实现的清洗规则为:根据每行address列包含的词汇,删除branch_name列中的对应内容,同时移除除撇号外的所有特殊字符,最终生成新的store_name列存储结果,预期输出如下:
branch_name | address | store_name Mcdonald's - BGC | 2nd str. BGC | Mcdonald's Jollibee - Taguig | BGC, Taguig | Jollibee ...
具体实现代码
第一步:导入依赖并构造测试数据
import pandas as pd import re # 构造示例数据 df = pd.DataFrame({ "branch_name": ["Mcdonald's - BGC", "Jollibee - Taguig"], "address": ["2nd str. BGC", "BGC, Taguig"] })
第二步:定义清洗函数
def clean_store_name(row): # 提取address列所有词汇,转小写去重避免大小写匹配问题 addr_words = set(re.findall(r'[a-zA-Z0-9]+', row['address'].lower())) # 先替换branch_name里的特殊字符(撇号除外)为空格 raw_branch = re.sub(r"[^\w']+", ' ', row['branch_name']).strip() # 拆分branch_name词汇,过滤掉属于address关键词的内容 remain_words = [word for word in raw_branch.split() if word.lower() not in addr_words] # 拼接剩余内容得到最终门店名 return ' '.join(remain_words).strip()
第三步:应用函数生成新列
df['store_name'] = df.apply(clean_store_name, axis=1)
兼容场景调整说明
如果你的门店名称包含中文,只需把清洗函数中特殊字符替换的正则规则调整为r"[^\u4e00-\u9fa5a-zA-Z0-9']+",即可兼容中文清洗需求。
内容的提问来源于stack exchange,提问作者Tenserflu
相关产品推荐
相关产品推荐

