项目背景

事情是这样的,某事业单位员工A需要每天从业务系统中导出订单表(表结构一致),并最终汇总到一个Excel中进行数据分析。他从系统中导出的文件结构为一个主目录orders,主目录下两个子目录分别为orders1和orders2,子目录下又有很多个订单表,具体如图所示:

他想实现以下几个需求:
1.合并指定目录下的所有订单表;
2.合并指定目录下的指定订单表;
3.合并指定目录下的指定订单表的指定字段;
4.合并所有目录下的所有订单表。

我看完需求后,有点蒙,甚至感觉有点像在学绕口令。

我连忙喝了杯海外上市的国产咖啡冷静了一下,突然有了些许头绪。为了不让思绪溜走,赶紧打开了order1.xlsx看下表结构,长这样:

项目实操

一、合并指定目录下的所有订单表

我以合并orders1目录下的所有订单表为例来进行操作。

首先,导入文件操作相关库。

#@Time : 2020/5/25 2:18 下午
#@Author : 菜J学Python
#@File : concat_excel.pyimport pandas as pd
from pathlib import Path

然后,获取orders1目录下所有订单表。

files = Path("orders/orders1").glob("*.xlsx")

接着,依次读取所有订单表并创建DataFrame。

dfs = []
for f in files:dfs.append(pd.read_excel(f))

将多个DataFrame合并为一个。

df = pd.concat(dfs)

写入Excel新文件result1.xlsx,并删除索引。

df.to_excel("result1.xlsx",index = False)

OK,合并成功。

细心的你可能已经发现,J哥已经写了足足8行代码。说好的6行代码能搞定呢?

咱不慌,优化以上代码,如下:

import pandas as pd
from pathlib import Path
files = Path("orders/orders1").glob("*.xlsx")
dfs = [pd.read_excel(f) for f in files]
df = pd.concat(dfs)
df.to_excel("result2.xlsx",index = False)

需求1搞定。

二、合并指定目录下的指定订单表

所有订单表都会合并了,只合并几个表算啥?只要指定好对应的文件路径就好啦。废话不多说,直接上代码:

dfs = [pd.read_excel(f) for f in ('orders/orders1/order1.xlsx','orders/orders1/order2.xlsx')]
df = pd.concat(dfs)
df.to_excel("result3.xlsx",index = False)

以上代码实现了orders1目录下的order1.xlsx和order2.xlsx合并。

需求2搞定。

三、合并指定目录指定订单表的指定字段

这个听起来有点绕,咱用正常人的口吻改下表述。比如还是orders1目录,咱们只合并order1.xlsx的品目字段和order2.xlsx的数量、单价字段。

table1 = pd.read_excel("orders/orders1/order1.xlsx")
table2 = pd.read_excel('orders/orders1/order2.xlsx')
part1 = table1.iloc[:,2]  #取order1.xlsx第3列的所有行
part2 = table2.iloc[:,[8,9]]  #取order2.xlsx的第9、10列的所有行
result4 = pd.concat([part1,part2],axis = 1 ) #合并

以上注意axis=1表示横向合并。打印一下result4,长这样:

实现倒是简单,不过J哥转念一想,这操作完全不符合业务逻辑啊。So,不管,就这样吧。
需求3搞定。

四、合并所有目录下的所有订单表

简单说下这个需求,就是把orders目录下orders1和orders2里面的所有Excel共计10个订单表合并在一个Excel里。

好像确实说复杂了…

实现这个需求要用到os库的walk方法。

先上代码再解释:

import pandas as pd
import os
file_list = os.walk("./")
result = []for dir_path,dirs,files in file_list:for f in files:file_path = os.path.join(dir_path,f) #重构文件路径print(file_path)if 'xlsx' in f:    #只要xlsx文件df = pd.read_excel(file_path) #将Excel转成DataFrameresult.append(df)
print(result)df = pd.concat(result) #多个DataFrame合成一个
df.to_excel("result4.xlsx",index=False) #导入到一个新的Excel中

通过os.walk()方法,可以查询到目录下不同文件夹中的文件。dir_path代表的是文件路径,dirs代表的是目录下的文件夹,files代表的是目录下的文件。这里J哥加了一个条件判断,因为print(file_path)时发现里面多了个没用的东东。

需求4搞定。

结 语

感觉Excel合并在我们的日常工作和生活中还是会经常用到的,如果你只是想合并几个Excel,我强烈建议你手动合并,你的手速肯定比我敲代码快。当然即使有大量的表格需要合并,VBA也是可以搞定的,虽然我没试过,但我觉得代码量肯定比Python多,毕竟Python只要6行代码啊!

在学习python中有任何困难不懂可以微信扫描下方CSDN官方认证二维码加入python交流学习
多多交流问题,互帮互助,这里有不错的学习教程和开发工具。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

四、实战案例

五、面试资料



最后,千万别辜负自己当时开始的一腔热血,一起变强大变优秀。

实战|Python六行代码实现多个Excel合并相关推荐

  1. 用python六行代码写一个简单的键盘记录器

    今天我们来用python制作一个键盘记录器 1.需要先安装pynput库 2.然后我们要在C盘里新建一个hi文件夹(我的电脑是c盘所以用c:盘新建,盘符可以更改) 3.新建好后我们打开pycharm开 ...

  2. 新技能 | 使用python代码来高效操作Excel表格 (文末赠书5本)

    新技能 | 使用python代码来高效操作Excel表格 (文末赠书5本) 在日常学习和工作中,少不了要跟Excel表格打交道.而我们作为程序猿,深知代码编程给人带来的便捷性,那我们怎么样使用代码来操 ...

  3. 【机器学习入门】(13) 实战:心脏病预测,补充: ROC曲线、精确率--召回率曲线,附python完整代码和数据集

    各位同学好,经过前几章python机器学习的探索,想必大家对各种预测方法也有了一定的认识.今天我们来进行一次实战,心脏病病例预测,本文对一些基础方法就不进行详细解释,有疑问的同学可以看我前几篇机器学习 ...

  4. 【机器学习入门】(5) 决策树算法实战:sklearn实现决策树,实例应用(沉船幸存者预测)附python完整代码及数据集

    各位同学好,今天和大家分享一下python机器学习中的决策树算法,在上一节中我介绍了决策树算法的基本原理,这一节,我将通过实例应用带大家进一步认识这个算法.文末有完整代码和数据集,需要的自取.那我们开 ...

  5. Python中将pandas的dataframe拷贝到剪切板并保持格式实战:to_clipboard()函数、复制到Excel文件、复制到文本文件(默认是tsv格式)、复制到文本文件(设置逗号分隔符)

    Python中将pandas的dataframe拷贝到剪切板并保持格式实战:to_clipboard()函数.复制到Excel文件.复制到文本文件(默认是tsv格式).复制到文本文件(设置逗号分隔符) ...

  6. python怎么读取github_六行代码获取Github排名前10的Python项目

    六行代码获取Github排名前10的Python项目 Github开放了不少API.下面是对这些API的一个使用. # 获取返回信息 import requests as r url="ht ...

  7. 仅用Python三行代码,实现数据库和excel之间的导入导出

    目录 一.前言 二.python代码 2.1 从MySQL数据库导入csv 2.2 从csv导入MySQL数据库 三.讲解视频 一.前言 之前我分享过两次python的高效编程技巧,分别是, pyth ...

  8. 『矩阵论笔记』线性判别分析(LDA)最全解读+python实战二分类代码+补充:矩阵求导可以参考

    线性判别分析(LDA)最全解读+python实战二分类代码! 文章目录 一.主要思想! 二.具体处理流程! 三.补充二中的公式的证明! 四.目标函数的求解过程! 4.1.优化问题的转化 4.2.拉格朗 ...

  9. 机械故障诊断信号的幅域分析 - 幅值概率密度函数 | 基于python的代码实现,在CWRU轴承数据上实战

    机械故障诊断信号的幅域分析 - 幅值概率密度函数 | 基于python的代码实现,在CWRU数据上实战 **1.随机信号的幅值概率密度函数介绍** **2.代码实战** 2.1导入包 2.2定义CWR ...

最新文章

  1. WMI技术介绍和应用——接收事件
  2. windows7下安装MongoDB数据库
  3. private的误解
  4. 微信小程序python数据交换代码_一个微信小程序通过 DDP 协议和 Meteor 后端交换数据的简单例子...
  5. 《助推》读书笔记-行为经济学
  6. python调用random失败_python怎么调用random
  7. 前端vscode常用插件
  8. 控制台应用和空项目有什么区别_互联网小程序的应用以及APP的应用有什么区别及发展...
  9. 哈夫曼编码和带权路径计算
  10. 短视频、直播平台第三方SDK接入教程
  11. redis——redis主从复制
  12. 程序在发布前就应该发现的一些错误
  13. Oracle VM VirtualBox 随系统自动启动虚拟机的方法
  14. adb启动app_ADB 命令大全
  15. Java数据脱敏框架
  16. C/C++如何整行输入
  17. Linux 必学的几个命令
  18. 【CTF题解NO.00008】mini-LCTF 2021 official write up by arttnba3
  19. Manjaro安装配置小记
  20. 球形/PH响应性的树枝状聚合物:树枝状聚酰胺PAMAM/His-PAMAM/DNA 聚酰胺偶联组氨酸/的制备流程

热门文章

  1. Bootstrap搭建背景轮播的登录界面
  2. linux centos安装远程软件向日葵
  3. “智慧城市”让景观照明更“绿色”!
  4. 笔记:处理token过期
  5. 【自定义表单】自定义表单设计
  6. Topic 5. SCI 文章之样本量确定及分割
  7. 高中计算机计划,高一信息技术工作计划
  8. 后端返回二进制文件流 前端处理并下载jpg格式图片
  9. vue VantUI组件初探 使用
  10. 单片机c语言编程 时钟加日历转换,单片机C语言电子时钟加日历显示编程