商城首页欢迎来到中国正版软件门户

您的位置:首页 >如何用 Pandas 合并 CSV 与 Excel 文件并识别数值差异

如何用 Pandas 合并 CSV 与 Excel 文件并识别数值差异

  发布于2026-05-03 阅读(0)

扫一扫,手机访问

面对结构不一致的CSV和Excel数据,如何一步到位地完成读取、对齐与合并,并生成一份清晰展示差异值和条件标记的新表格?本文将为你揭晓答案。

在日常的数据核对工作中,我们常常会遇到一个典型挑战:需要整合来自不同源头、列名不统一、日期格式各异的文件,并快速定位关键数值字段之间的偏差。今天,我们就以一个具体场景为例,手把手拆解这个流程。

假设你手头有两份数据:一份CSV文件,包含 test dateidvalues 1 三列;另一份Excel文件,其表头位于第5行,包含 iddate(格式为“3/12/2024”)、values 2 三列。我们的目标很明确:按 id 关联两条记录,统一混乱的日期格式,计算 values 2values 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)

几个需要留意的关键点:

  • 如果Excel的表头不在第5行,灵活调整 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"})
  • 最终的结果,可以轻松导出为新的Excel文件,方便分享:result.to_excel("discrepancy_report.xlsx", index=False)

这套流程清晰直接,既适合数据处理的初学者快速上手,也能很好地满足日常数据稽核与自动化报表生成的需求。下次再遇到结构混乱的源数据,不妨试试这个方法。

本文转载于:https://www.php.cn/faq/2311301.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注