01.一个自动合并多个excel表(非多工作簿)的工具

您所在的位置:网站首页 excel合并代码怎么用 01.一个自动合并多个excel表(非多工作簿)的工具

01.一个自动合并多个excel表(非多工作簿)的工具

2023-12-20 16:27| 来源: 网络整理| 查看: 265

01.一个自动合并多个excel(非多工作簿)的小程序

写在前面: 最近有小伙伴说他是一个综合经理,各个部门的数据都是分开统计的,每次合并这些部门的表都好麻烦,重复工作,浪费时间,听说我是个代码高手,问我能不能提高一下他的效率,我说,提高效率没问题,但我这下午茶嘛,是不是要安排一下,小伙伴二话没说,立马安排,我瞅了一眼这位小伙伴的数据,立马抽了几个以前写过的函数拼接一下,他要的代码就完成啦!

目前已经打包成exe文件

工具链接(点我跳转):https://download.csdn.net/download/Captain_DUDU/85411920

01.以下是代码解析,小白可以从这开始看,高手的话直接看代码吧!!

公主号:船长数据分析 vx:captain_data #有问题可以找我哦~ if __name__ == '__main__': ############请输入路径############ f_path=input("--- 请输入文件主路径:") main_data_in(f_path)

先来看主函数,传入了一个文件夹路径,也就是说,此小程序需要你把所有表格数据放在一个目录下,然后在运行本程序时将路径填入,接着路径被传递到main_data_in 这个函数

# 主函数模块 所有函数调用归集在此函数 def main_data_in(path_all_str): fPath_name_list=group_by_pathName(path_all_str) data_out=concat_pathName(fPath_name_list) out_Excel(data_out)

查看 main_data_in 函数 里头依次调用了 1. group_by_pathName 2. concat_pathName 3. out_Excel 三个函数

# 读取路径下所有文件名返回路径集列表 def group_by_pathName(f_path): f_path = f_path #fPath_jymx_list_error = [] fPath_name_list = [] for root, dirs, files in os.walk(f_path): for name in files: fPath_name_list.append(os.path.join(root, name)) return fPath_name_list

接着我们看第一个函数 group_by_pathName在干什么,从以上代码我们看到, 传入的 f_path 用os.walk(f_path) q嵌套一个循环,然后该路径下所有文件名被遍历并装进 fPath_name_list 这个列表中

# 合并所有表格 def concat_pathName(fPath_name_list): print("--- 开始加载数据 ---") data_top = pd.read_excel(fPath_name_list[0],dtype='str') for fPath_name in fPath_name_list: print("---正在加载:%s---"%(fPath_name)) data_load = pd.read_excel(fPath_name, dtype='str') data_top = pd.concat([data_top, data_load], axis=0) data_top=data_top.drop_duplicates(data_top.columns,keep="first") data_out=data_top return data_out

然后我们看第二个函数concat_pathName,该函数将 group_by_pathName返回的fPath_name_list 列表传入,再遍历,读取,用pd.concat 将每次读取的dataFrame竖向(axis=0)拼接,再利用drop_duplicates 将data_top第一次重复读取的数据去重,也就得到了所有合并数据

# 数据导出函数 def out_Excel(data_out_dataFrame): data_out_dataFrame.to_excel("07.合并excel数据/合并导出.xlsx",index=False) print("--- 合并数据导出成功 ---")

而前面两个函数已经把所有需要合并的个工作做完,接下来我们只要将返回的dataFrame 导出在我们工作的文件夹就行了。 该小程序简单运用了os库遍历了路径,然后再利用concat将每次读取的数据不断竖向拼接,一下子将我们在工作中遇到的多Excel表,同列名的情况自动化了,从此解放双手,10秒钟完成1小时的工作量。 看到这里了,记得关注收藏博主,下次送上单个Excel表,多工作簿合并代码!

全代码: import numpy as np import pandas as pd import os # vx:672377334 船长 # QQ:672377334 船长 # 列名对齐 pd.set_option('display.unicode.ambiguous_as_wide', True) pd.set_option('display.unicode.east_asian_width', True) # 读取路径下所有文件名返回路径集列表 def group_by_pathName(f_path): f_path = f_path #fPath_jymx_list_error = [] fPath_name_list = [] for root, dirs, files in os.walk(f_path): for name in files: fPath_name_list.append(os.path.join(root, name)) return fPath_name_list # 合并所有表格 def concat_pathName(fPath_name_list): print("--- 开始加载数据 ---") data_top = pd.read_excel(fPath_name_list[0],dtype='str') for fPath_name in fPath_name_list: print("---正在加载:%s---"%(fPath_name)) data_load = pd.read_excel(fPath_name, dtype='str') data_top = pd.concat([data_top, data_load], axis=0) data_top=data_top.drop_duplicates(data_top.columns,keep="first") data_out=data_top return data_out # 数据导出函数 def out_Excel(data_out_dataFrame): data_out_dataFrame.to_excel("07.合并excel数据/合并导出.xlsx",index=False) print("--- 合并数据导出成功 ---") # 主函数模块 所有函数调用归集在此函数 def main_data_in(path_all_str): fPath_name_list=group_by_pathName(path_all_str) data_out=concat_pathName(fPath_name_list) out_Excel(data_out) if __name__ == '__main__': ############请输入路径############ f_path=input("--- 请输入文件主路径:") main_data_in(f_path)

v1.2 迭代版本

支持csv与excel 同列名一起合并

import pandas as pd import os import datetime # 列名对齐 pd.set_option('display.unicode.ambiguous_as_wide', True) pd.set_option('display.unicode.east_asian_width', True) def path_name_time(): global path_nameTime timestr = datetime.datetime.now().strftime('%Y%m%d%H%M%S') ###生成当下的时间 path_nameTime = timestr def get_filepath(fpath): # 获取文件路径函数 print("--- 开始获取文件路径 ---") fpath_list = [] for root, dirs, files in os.walk(fpath): for name in files: fpath_list.append(os.path.join(root, name)) return fpath_list print("--- 获取文件路径完成 ---") def concat_file(fname_list): # 文件合并函数 xls_top = pd.DataFrame() # xls_top = pd.read_excel(fname_list[0], dtype = 'str') print("--- 开始合并文件 ---") for name in fname_list: print("--- 正在合并文件:%s ---" % os.path.basename(name)) if 'xls' in name or 'xlsx' in name: xls_load = pd.read_excel(name, dtype='str') elif 'csv' in name: xls_load = pd.read_csv(name, dtype='str') else: print('--- 文件:%s非excel或csv文件,跳过 ---' % os.path.basename(name)) continue xls_ls = list(xls_load.columns) xls_ls.append('文件路径') xls_load['文件路径'] = name xls_top = xls_top.append(xls_load) # xls_top.drop_duplicates(keep="first", inplace=True) xls_out = xls_top[xls_ls] return xls_out print("--- 合并文件完成 ---") def out_Excel(xls_out): # 数据导出函数 path_name_time() out_file_name = './'+path_nameTime + '合并导出.xlsx' xls_out.to_excel(out_file_name, index=False) print("--- 合并数据导出成功 ---") a = input('按任意键退出程序') if __name__ == '__main__': print("--- 请将不需要合并的excel或csv文件移出文件夹 ---") fpath = input('请输入文件夹路径(输入后回车键确认):') fname_list = get_filepath(fpath) concat_end_file = concat_file(fname_list) out_Excel(concat_end_file)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3