使用Python合并多份Excel文件时如何避免invoice列重复值?
Python 报表发票列去重方案
核心实现(基于Pandas)
Pandas是处理表格数据的高效工具,代码简洁易上手,完全适配你的场景:
- 先安装依赖(未安装过的话执行):
pip install pandas openpyxl # openpyxl用于读取Excel文件,CSV文件无需此依赖
- 基础去重代码示例:
import pandas as pd # 读取合并后的报表文件,根据格式选择对应方法 # 读取CSV文件 df = pd.read_csv("合并后的报表.csv") # 读取Excel文件(xlsx格式) # df = pd.read_excel("合并后的报表.xlsx", engine="openpyxl") # 对invoice列去重,保留第一次出现的完整记录 # subset指定去重依据的列,keep='first'保留首次出现,'last'保留末次,False删除所有重复项 df_unique = df.drop_duplicates(subset="invoice", keep="first") # 保存去重后的结果 df_unique.to_csv("去重后的报表.csv", index=False) # 或者保存为Excel格式 # df_unique.to_excel("去重后的报表.xlsx", index=False, engine="openpyxl")
大文件内存优化方案
如果合并后的文件总数据量过大(接近40万行),担心内存不足,可分块处理:
import pandas as pd # 设置分块大小,根据自身内存情况调整,比如10000行一块 chunk_size = 10000 output_file = "去重后的报表.csv" # 初始化空DataFrame存储全局去重结果 unique_records = pd.DataFrame() # 分块读取原文件并逐步去重 for chunk in pd.read_csv("合并后的报表.csv", chunksize=chunk_size): # 先对当前块内数据去重 chunk_unique = chunk.drop_duplicates(subset="invoice", keep="first") # 与已有的全局去重结果合并,再次去重保证全局唯一 unique_records = pd.concat([unique_records, chunk_unique]).drop_duplicates(subset="invoice", keep="first") # 保存最终结果 unique_records.to_csv(output_file, index=False)
关键参数说明
subset="invoice":明确仅依据invoice列判断重复,其他列内容不影响去重逻辑keep="first":保留该发票第一次出现的整行数据;若需保留最新记录(如6月的重复发票),改为keep="last"即可index=False:保存结果时不生成额外索引列,避免破坏原有报表格式
内容的提问来源于stack exchange,提问作者yisus097
相关产品推荐
相关产品推荐

