• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python 合并多个excel中同名的sheet

    大家好~ 老Amy来啦!已经n久没有给大家输出关于办公自动化的文章了…为什么呢?罗列原因:

    然鹅,一位朋友的困惑成为了我这种“麻木状态”的终结者,他提出需求如下:

    想不断尝试的老Amy,开启了思考模式:“我要怎么实现这个需求呢?”。

    不用着急,首先我们来分析数据本身。

    分析数据特征如下:

    数据所在路径 C:\Users\logic\Desktop\mytest\file_dir

    data01.xlsx 数据如下:

    data02.xlsx 数据如下:

    由上可得信息如下:

    我们需要合并数据,首先需要读取到每个工作簿下每个工作表的数据,实现流程如下:

    那要通过代码完成上面的连环操作,我们就需要使用到 python 中的内置模块 os 模块——与操作系统进行交互的模块,来获取文件夹下所有工作簿名,代码如下:

    import os # 导入模块
    
    # 列出 C:\Users\logic\Desktop\mytest\file_dir 下所有文件名
    file_name_li = os.listdir(r"C:\Users\logic\Desktop\mytest\file_dir")
    file_name_li
    
    ---------------------------------------------------------------------
    ['data01.xlsx', 'data02.xlsx']

    但此时,无法只通过文件名去系统中找到对应的文件,所以我们需要更准确一点儿的地址——绝对路径,所以现在我们需要拼接每个文件的绝对路径。代码如下:

    # 遍历出每个文件名
    for file_name in file_name_li:
      # 将文件夹绝对路径 与 文件名进行拼接
      file_path_li = os.path.join(r"C:\Users\logic\Desktop\mytest\file_dir",file_name)
      print(file_path_li)
      
    --------------------------------------------------------------------
    C:\Users\logic\Desktop\mytest\file_dir\data01.xlsx
    C:\Users\logic\Desktop\mytest\file_dir\data02.xlsx

    有了文件的绝对路径后,我们就可以来读取文件中的数据,那就要使用到法宝 pandas 了。首先大家注意,pandas 并不是 python 的内置模块,而是需要我们去安装的。然后使用 pandas 的 read_excel() 方法读取数据,但是需要注意的是,此时我们需要读取的是工作簿下的所有工作表,所以需要指定 sheet_name 为 None,否则会默认读取第一个工作表。代码如下:

    # 遍历出每个文件名
    for file_name in file_name_li:
      # 将文件夹绝对路径 与 文件名进行拼接
      file_path_li = os.path.join(r"C:\Users\logic\Desktop\mytest\file_dir",file_name)
      # 读取 excel 表格数据
      all_data = pd.read_excel(file_path_li,sheet_name=None)
      print(all_data)
      
    --------------------------------------------------------------------
    OrderedDict([('202001',     车牌号 驾驶员   起始公里  截至公里  里程数   加油金额  加油公升
    0  鄂J0969  陈燕 186701.0 186935  234  267.07  32.41
    1  鄂A25JL NaN    NaN    0   0   NaN   NaN
    2  鄂A37NK  吕扬  40283.0  40993  710  512.08  68.37
    3  鄂A332B NaN    NaN    0   0   NaN   NaN
    4  鄂A3J78L  尚超    0.0   33  33   NaN   NaN
    5  鄂A484ZF  鲁浩  50286.0  52574 2288 1340.84 191.45
    6  鄂A620J  袁耀  41398.0  43604 2206 1579.69 225.67
    7  鄂A7A8Z  志勇  41560.0  42883 1323  788.48 107.57
    8  鄂AJ37Y  刘冲    0.0   73  73   NaN   NaN
    9  鄂AD9251  毛义  3214.0  3349  135   NaN   NaN
    10 鄂AD2192  赵敏   434.0   796  362   NaN   NaN),...], ...)
    

    从上打印出的结果(我取了第一个),会发现它的类型为 OrderedDict ,虽然组合起来好像不是很看得懂,但是分开来看,它的本质实际上是 Dict。所以实际上我们可以通过 202001 来获取对应的数据值。如:

    # 遍历出每个文件名
    for file_name in file_name_li:
      # 将文件夹绝对路径 与 文件名进行拼接
      file_path_li = os.path.join(r"C:\Users\logic\Desktop\mytest\file_dir",file_name)
      # 读取 excel 表格数据
      all_data = pd.read_excel(file_path_li,sheet_name=None)
      print(all_data["202001"])
    
    ---------------------------------------------------------------------
    车牌号 驾驶员   起始公里  截至公里  里程数   加油金额  加油公升
    0  鄂J0969  陈燕 186701.0 186935  234  267.07  32.41
    1  鄂A25JL NaN    NaN    0   0   NaN   NaN
    2  鄂A37NK  吕扬  40283.0  40993  710  512.08  68.37
    3  鄂A332B NaN    NaN    0   0   NaN   NaN
    4  鄂A3J78L  尚超    0.0   33  33   NaN   NaN
    5  鄂A484ZF  鲁浩  50286.0  52574 2288 1340.84 191.45
    6  鄂A620J  袁耀  41398.0  43604 2206 1579.69 225.67
    7  鄂A7A8Z  志勇  41560.0  42883 1323  788.48 107.57
    8  鄂AJ37Y  刘冲    0.0   73  73   NaN   NaN
    9  鄂AD9251  毛义  3214.0  3349  135   NaN   NaN
    10 鄂AD2192  赵敏   434.0   796  362   NaN   NaN
      
    车牌号 驾驶员  起始公里  截至公里  里程数   加油金额  加油公升
    0  鄂J0039 周鹏  15512  15512   0   NaN   NaN
    1  鄂J0021 王林  7790  7790   0   NaN   NaN
    2  鄂J0022 徐涛 373505 373505   0   NaN   NaN
    3  鄂J0079 赵舟 431169 431169   0   NaN   NaN
    4  鄂J0018  郭鹰  3635  3635   0   NaN   NaN
    5  鄂J0808 周尊 257743 257743   0   NaN   NaN
    6  鄂J01X3 胡志  72000  72150  150  159.26  25.16
    7  鄂J01X0 吴军  73031  73568  537  393.46  58.12
    8  鄂J0F12 宋安 149017 149050  33   0.00  0.00
    9  鄂J0F52 金煜 150617 150617   0   NaN   NaN
    10  鄂J0272 刘兵  58124  58305  181   0.00  0.00
    11  鄂J02F2 胡飞 169665 169665   0   NaN   NaN
    12  鄂J0292 王勇 111625 113121 1496 1081.37 156.54
    13  鄂J05R0 刘金  99278  99278   0   NaN   NaN
    

    从打印结果,可以发现,我们通过 202001 可以取到两个工作簿中 202001 的数据,这是为什么呢?傻瓜,因为循环呀~所以,现在我们就想,把数据都添加到一个列表中。除此之外,我们还需要工作表名来获取数据,也就是将工作表名保存到一个集合中(以便去重)。

    # 定义文件名集合
    all_file_name = set()
    # 定义数据列表
    all_data_li = []
    
    # 遍历出每个文件名
    for file_name in file_name_li:
      # 将文件夹绝对路径 与 文件名进行拼接
      file_path_li = os.path.join(r"C:\Users\logic\Desktop\mytest\file_dir",file_name)
      # 读取 excel 表格数据
      all_data = pd.read_excel(file_path_li,sheet_name=None)
      # 将数据添加到数据列表中
      all_data_li.append(all_data)
      # 将工作表名添加到文件夹集合中
      for name in all_data:
        all_file_name.add(name)
    
    print(all_data_li)
    print(all_file_name)
    

    有了这些宝贝之后,我们就可以来实现非常关键的步骤了,也就是取出相同名称的工作表进行拼接保存到新的工作表中。

    不过仍然要思考的是,我们怎么使用 pandas 给一个工作簿中添加多个工作表呢?那就需要使用 pd.ExcelWriter了。代码如下:

    # 创建工作簿
    writer = pd.ExcelWriter("all_data.xlsx")
    
    # 遍历每个工作表名
    for sheet_name in all_file_name:
      data_li = []
      # 遍历数据
      for data in all_data_li:
        # 获取同名数据并添加到data_li中
        n_rows = data_li.append(data[sheet_name])
      # 将同名数据进行拼接
      group_data = pd.concat(data_li)
      # 保存到writer工作簿中,并指定工作表名为sheet_name
      group_data.to_excel(writer,sheet_name=sheet_name)
    
    # 千万莫忘记,保存工作簿
    writer.save()

    就酱,实现完毕啦~哈哈哈哈哈

    以上就是python 合并多个excel中同名的sheet的详细内容,更多关于python 合并excel中的sheet的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • Python合并Excel表(多sheet)的实现
    • python pandas合并Sheet,处理列乱序和出现Unnamed列的解决
    • Python使用openpyxl复制整张sheet
    • Python对多个sheet表进行整合实例讲解
    上一篇:python基于Kivy写一个图形桌面时钟程序
    下一篇:浅析pandas随机排列与随机抽样
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python 合并多个excel中同名的sheet python,合并,多个,excel,中,