大家好。和大家分享一个触发我自学python初衷的小程序——Excel表格汇总技巧。
出于工作上的需要,经常要汇总全国各地分支机构的同一种表格数据,表格数量多,但样式统一,最初用ctrl+c、+v大法实在太痛苦了,无意间百度后得知了python,于是开始了探索尝试,中间用不同的库(openpyxl、xlrd+xlwt等等)实现过这个需求,目前用的比较稳定的是基于pandas。
简要说明下,主要是适用于列相同(或行相同)的Excel表格纵向(或横向)汇总拼接。
操作步骤如下:
1、先输入要汇总的.xlsx文件存放目录,该目录下不要有子目录或其他不需要汇总的文件,
2、表格第一行为表头,如不是,可输入跳过前几行,
3、按提示选择拼接方式:横向或纵向
4、汇总后表格将在输入的目录下自动生成“汇总表.xlsx”
下面是代码
import os
import pandas as pd
print("欢迎使用本工具,适用于列相同(或行相同)的Excel表格纵向(或横向)汇总拼接:\n"
"1、先输入要汇总的.xlsx文件存放目录,该目录下不要有子目录或其他不需要汇总的文件,\n"
"2、表格第一行自动为表头,如不是,可输入跳过前几行,\n"
"3、按提示选择拼接方式:横向或纵向\n"
"4、汇总后表格将在输入的目录下自动生成'汇总表.xlsx'\n"
"——by Mxh")
print("*"*50)
dirpath = input("请输入要汇总文件的目录(绝对路径):")
os.chdir(dirpath)
flist = os.listdir(dirpath)
skip_rows = int(input("请输入要跳过的表头行数(不用跳过请输入0):"))
axis_opt = input("请选择拼接表格方向:0:表示纵向拼接;其他:表示横向拼接")
dfl = []
i = 0
for file in flist:
# 修改数字为文本格式
print(file)
# 注:有些单元格是长身份证号,容易汇总后编程科学计数法,因此用了converters指定数据类型,也可以用dtype指定。查下pandas手册即可。初次运行可以把converters={'身份证号':str},这段删掉
df = pd.read_excel(file, converters={'身份证号':str}, skiprows = skip_rows)
# df["分公司"] = file[9:-5] #增加一列“分公司”,并从文件名获取
df['来源文件'] = file
i += df.shape[0]
# print(file,df.shape[0])
# print(i)
dfl.append(df)
print("%s 已完成" %file)
if axis_opt == "0":
fall = pd.concat(dfl,ignore_index=True) # 纵向拼接
else:
fall = pd.concat(dfl, axis=1,ignore_index=True) # 横向拼接
fall.dropna(how='all')
# 导出到本地文件
fall.to_excel('汇总表.xlsx')
有什么问题欢迎交流