合并具有相同列的excel文件(行连接)


前言

需解决的问题:合并多个具有相同列的excel文件
解决思路:pandas.concat()

pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
# Concatenate pandas objects along a particular axis with optional set logic along the other axes.

pandas.concat()通常用来连接DataFrame对象。默认情况下axis=0,即对两个或多个DataFrame对象进行纵向连接;axis=1时则实现DataFrame对象的横向连接。

一、代码

import pandas as pd
import os


def con_excels(ori_dir, save_dir, new_filename, fields=""):
    """
    合并同一文件夹下的excel文件
    :param ori_dir: 需合并excel文件夹路径
    :param save_dir: 合并后保存路径
    :param new_filename: 新的excel文件名称
    :param fields: 去重所依据的字段
    :return: 
    """
    file_list = os.listdir(ori_dir)  # 找到文件路径下的所有表格名称,返回列表
    new_list = []

    for file in file_list:
        file_path = os.path.join(ori_dir,file)    # 重构文件路径
        dataframe = pd.read_excel(file_path)    # 将excel转换成DataFrame
        new_list.append(dataframe)  # 保存到新列表中

    df = pd.concat(new_list)  # 多个DataFrame合并为一个
    if fields:
        df.drop_duplicates(keep='first', subset=fields, inplace=True)  # 根据fields去重

    df.drop_duplicates(keep='first', inplace=True)  # 去重
    if not os.path.exists(save_dir):
        os.mkdir(save_dir)
    writer = pd.ExcelWriter(os.path.join(save_dir, new_filename), engine='xlsxwriter',options={'strings_to_urls': False})
    df.to_excel(writer,index=False)
    writer.save()
    print("合并完成")

二、使用

if __name__ == "__main__":
    file_dir = r"split_result"  # 需合并excel文件夹路径
    save_dir = r"con_files"  # 合并后保存路径
    new_filename = 'concat_excel.xlsx'  # 新的表格名称  
    con_excels(file_dir, save_dir, new_filename)
    
    # fields = ["文章标题", "文章内容"]
    # con_excels(file_dir, save_dir, new_filename, fields=fields)

总结

  1. 合并表格的方式有多种,可尝试使用xlsxwriter模块实现
  2. 可以使用相同的方法实现其他类型数据(可读取为DataFrame对象)的合并
  3. 设置axis=1,实现多个DataFrame对象的列连接
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值