如何基于多列进行模糊匹配合并两个爬取所得的DataFrame门店数据集
多列模糊匹配合并门店数据集实现方案
前置依赖
使用pandas库处理DataFrame,先导入依赖:
import pandas as pd
实现步骤
1. 标准化匹配字段消除格式差异
门店名称存在大小写不一致(如示例中的KFC和Kfc)、编码可能带多余空格等问题,首先对两个表的匹配列做标准化处理,为模糊匹配打基础:
# 假设第一个数据集为df1,第二个为df2 # 给df1添加标准化辅助列 df1['std_code'] = df1['store code'].str.strip() df1['std_name'] = df1['name'].str.strip().str.upper() # 统一df2的字段名和df1对齐,同时添加标准化辅助列 df2 = df2.rename(columns={ 'store code2': 'store code', 'name2': 'name', 'phone2': 'phone', 'email2': 'email', 'website2': 'website' }) df2['std_code'] = df2['store code'].str.strip() df2['std_name'] = df2['name'].str.strip().str.upper()
如果实际场景中门店名称还包含特殊符号、括号等冗余内容,可以在标准化步骤中增加正则替换逻辑,进一步提升匹配准确率。
2. 双列外连接匹配
以标准化后的门店编码、门店名称为匹配键,做外连接保留两个表的所有行:
merged_df = pd.merge( df1, df2, on=['std_code', 'std_name'], how='outer', suffixes=('_df1', '_df2') )
3. 合并同名字段值
根据业务需求选择字段取值优先级,示例可选优先级逻辑如下:
# 定义需要保留的业务字段 cols = ['store code', 'name', 'phone', 'email', 'website'] for col in cols: # 方案1:优先取第一个表的非空值,空值用第二个表的内容填充 merged_df[col] = merged_df[f'{col}_df1'].fillna(merged_df[f'{col}_df2']) # 方案2:优先取第二个表的非空值(如果第二个网站数据更新,推荐用这个方案) # merged_df[col] = merged_df[f'{col}_df2'].fillna(merged_df[f'{col}_df1']) # 方案3:不同字段单独设置优先级,比如基础信息取第一个表,联系方式取第二个表 # if col in ['phone', 'email']: # merged_df[col] = merged_df[f'{col}_df2'].fillna(merged_df[f'{col}_df1']) # else: # merged_df[col] = merged_df[f'{col}_df1'].fillna(merged_df[f'{col}_df2'])
4. 清理得到最终结果
删除辅助字段、去重排序即可得到目标数据集:
final_df = merged_df[cols].drop_duplicates().sort_values('store code').reset_index(drop=True)
内容的提问来源于stack exchange,提问作者user16286965
相关产品推荐
相关产品推荐

