You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

制药网站数据集合并遇阻:求Pandas匹配合并正确方案

解决方法:统一格式后左连接匹配

你的核心需求是保留第一个数据集(new_df)的全部251条数据,仅在Name匹配时补充第二个数据集(match_data)的产品描述,问题出在直接匹配时Name列的格式不统一(比如大小写、空格、多单词差异),导致匹配失败。以下是可行的步骤:

1. 预处理Name列,统一匹配规则

先对两个数据集的Name列做标准化处理,消除格式差异。比如你之前尝试取match_data中Name的第一个单词,那我们统一按这个规则清理:

import pandas as pd

# 处理new_df的Name:转字符串、去首尾空格、转小写
new_df['clean_name'] = new_df['Name'].astype(str).str.strip().str.lower()

# 处理match_data的Name:取第一个单词、去空格、转小写
match_data['clean_name'] = match_data['Name'].astype(str) \
    .str.split(' ', n=1).str[0] \
    .str.strip().str.lower()

注:如果你的匹配规则不是取第一个单词,可调整这里的处理逻辑(比如保留完整名称但统一格式)。

2. 用左连接实现匹配

使用Pandas的merge做左连接,确保保留new_df的所有行:

# 左连接,只关联需要的字段(clean_name和产品描述)
merged_df = pd.merge(
    new_df,
    match_data[['clean_name', 'Product_Description']],
    on='clean_name',
    how='left'
)

# 填充未匹配到的产品描述为空字符串
merged_df['Product_description'] = merged_df['Product_Description'].fillna('')

# 清理临时列
merged_df = merged_df.drop(columns=['clean_name', 'Product_Description'])

3. 替代方案:用字典映射快速匹配

如果数据量不大,也可以用字典映射实现:

# 构建{清理后的名称: 产品描述}的字典
desc_dict = match_data.set_index('clean_name')['Product_Description'].to_dict()

# 直接映射到new_df中
new_df['Product_description'] = new_df['clean_name'].map(desc_dict).fillna('')

为什么之前的方法无效?

  • 循环匹配:不仅效率低,还可能因为new_df['Name'][i]是float(说明存在NaN值),但你的判断逻辑没处理好NaN的情况,且未统一格式导致匹配失败。
  • 直接左连接:原Name列格式不统一(比如大小写、多单词),导致实际匹配的行很少,所以只得到106条结果。

最后,建议你先查看new_df['clean_name']和match_data['clean_name']的唯一值,确认匹配规则是否正确,调整预处理逻辑即可。

内容的提问来源于stack exchange,提问作者Lalit Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:25:48