您的位置:首页 >如何用 Pandas 合并 CSV 与 Excel 文件并识别数值差异
发布于2026-05-03 阅读(0)
扫一扫,手机访问
面对结构不一致的CSV和Excel数据,如何一步到位地完成读取、对齐与合并,并生成一份清晰展示差异值和条件标记的新表格?本文将为你揭晓答案。
在日常的数据核对工作中,我们常常会遇到一个典型挑战:需要整合来自不同源头、列名不统一、日期格式各异的文件,并快速定位关键数值字段之间的偏差。今天,我们就以一个具体场景为例,手把手拆解这个流程。
假设你手头有两份数据:一份CSV文件,包含 test date、id、values 1 三列;另一份Excel文件,其表头位于第5行,包含 id、date(格式为“3/12/2024”)、values 2 三列。我们的目标很明确:按 id 关联两条记录,统一混乱的日期格式,计算 values 2 与 values 1 的差值,并自动标记出差值“是否超过2”。
下面就是一套完整、可直接复用的解决方案,兼顾了健壮性与可读性:
import pandas as pd
# 1. 分别读取 CSV 和 Excel(跳过前4行,使第5行为列名)
df_csv = pd.read_csv("test.csv")
df_excel = pd.read_excel("test.xlsx", skiprows=4)
# 2. 标准化列名,便于后续合并
df_csv = df_csv.rename(columns={"test date": "date", "values 1": "value_1"})
df_excel = df_excel.rename(columns={"values 2": "value_2"})
# 3. 统一日期格式:将 Excel 中的 date 转为 YYYY-MM-DD 字符串(与 CSV 一致)
df_excel["date"] = pd.to_datetime(df_excel["date"]).dt.strftime("%Y-%m-%d")
# 4. 基于 'id' 和 'date' 双键合并(推荐:避免仅用 id 导致多对一歧义)
merged = pd.merge(df_csv, df_excel, on=["id", "date"], how="inner")
# 5. 构建结果表,计算差异并添加布尔标记
result = merged[["date", "id", "value_1", "value_2"]].copy()
result["discrepancy"] = result["value_2"] - result["value_1"]
result["Over 2?"] = result["discrepancy"] > 2 # 自动转为布尔值,可选 .map({True: "yes", False: "no"})
print(result)
几个需要留意的关键点:
skiprows 参数即可;更复杂的情况,可以考虑用 header=None 配合 iloc 手动指定。["id", "date"] 双键进行合并,比单用 id 更稳妥,能有效防止同一ID对应多个日期时产生意外的笛卡尔积。pd.to_datetime(...).dt.strftime() 这一连招,确保了日期格式的完全对齐,避免了因字符串格式不同导致的匹配失败。"Over 2?" 列默认为布尔型(True/False)。如果需要更直观的“yes”/“no”显示,可以在最后追加一行代码:
result["Over 2?"] = result["Over 2?"].map({True: "yes", False: "no"})
result.to_excel("discrepancy_report.xlsx", index=False)。这套流程清晰直接,既适合数据处理的初学者快速上手,也能很好地满足日常数据稽核与自动化报表生成的需求。下次再遇到结构混乱的源数据,不妨试试这个方法。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9