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

Python对比CSV文件求交集遇MergeError,附可视化需求求助

解决CSV合并MergeError并实现交集提取与可视化

报错原因及修复方案

你遇到的MergeError大概率是因为**name_id列的匹配存在问题**,比如列名/值带空格、数据类型不匹配,或是未明确指定合并键。下面是修复后的完整代码:

import pandas as pd

# 读取文件,处理CSV中逗号后带空格的情况,同时清洗列名和值的空格
file1 = pd.read_csv('old_file.csv', sep=',\s*', engine='python')
file1['name_id'] = file1['name_id'].str.strip()

file2 = pd.read_csv('best_choice_file.csv')
file2['name_id'] = file2['name_id'].str.strip()

# 明确指定合并键为name_id,取交集(inner join)
common_rows = pd.merge(file1, file2, on='name_id', how='inner')
print("共同数据行:")
print(common_rows)

# 可选:将结果保存到新CSV
common_rows.to_csv('common_concentrations.csv', index=False)

关键修复点:

  • 用sep=',\s*'和engine='python'解析CSV中逗号后带任意空格的格式,避免列名读取错误
  • 用str.strip()去除name_id值的前后空格,解决因空格导致的匹配失败
  • 明确指定on='name_id'和how='inner',替代默认合并逻辑,避免歧义

浓度数据可视化

提取到共同数据后,可通过以下代码做可视化对比:

import matplotlib.pyplot as plt

# 柱状图:对比每个样本的两个测试浓度
plt.figure(figsize=(12, 6))
x = range(len(common_rows))
width = 0.35

plt.bar([i - width/2 for i in x], common_rows['conc_test1'], width, label='conc_test1')
plt.bar([i + width/2 for i in x], common_rows['conc_test2'], width, label='conc_test2')

plt.xticks(x, common_rows['name_id'], rotation=45, ha='right')
plt.title('优选样本浓度测试对比')
plt.xlabel('样本ID')
plt.ylabel('浓度值')
plt.legend()
plt.tight_layout()
plt.show()

# 箱线图:查看两个测试浓度的整体分布
plt.figure(figsize=(8, 6))
common_rows[['conc_test1', 'conc_test2']].boxplot()
plt.title('优选样本浓度分布')
plt.ylabel('浓度值')
plt.show()

额外排查项

如果仍报错,检查以下内容:

  • 确认两个文件的name_id列名完全一致(注意大小写、特殊字符)
  • 检查name_id列是否有空值,可通过以下代码去除缺失行:
    file1 = file1.dropna(subset=['name_id'])
    file2 = file2.dropna(subset=['name_id'])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:52:44