用python玩Excel汇总——基于pandas的初步应用

大家好。和大家分享一个触发我自学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')



有什么问题欢迎交流

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值