python 二维表合并_实战|Python六行代码实现多个Excel合并

本文介绍了如何使用Python的pandas库自动化合并Excel订单表,包括合并指定目录下的所有订单表、指定订单表、指定字段,以及所有目录下的所有订单表。通过实例代码展示了解决方案,适用于批量处理数据的需求。
摘要由CSDN通过智能技术生成

bdc56d84ab94467d97758b45fd0be8dc.gif

大家好,我是J哥,也可以叫我菜J,专注原创,致力于用浅显易懂的语言分享网络爬虫、数据分析、可视化、自动化办公等干货,希望人人都能学到新知识。 项目背景

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

f9497e3146568f8ffdd414c0acc24fb2.png

他想实现以下几个需求:

1.合并指定目录下的所有订单表; 2.合并指定目录下的指定订单表; 3.合并指定目录下的指定订单表的指定字段; 4.合并所有目录下的所有订单表。

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

2d3de92134fb6591862ffa996e6464df.gif

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

59ffd50c299788ceb09d11e6a9205d65.png

项目实操 一 合并指定目录下的所有订单表

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

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

#@Time : 2020/5/25 2:18 下午
#@Author : 菜J学Python
#@File : concat_excel.py

import 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行代码能搞定呢?

479587d8841830d599638b58613131c7.png

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

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,长这样:

c73180a830af9f838bd3be424924e79a.png

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

需求3搞定。

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

d45e0e1888e5566ed7c4fced7460eae9.png

好像确实说复杂了......

实现这个需求要用到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转成DataFrame
            result.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,J哥强烈建议你手动合并,你的手速肯定比我敲代码快。当然即使有大量的表格需要合并,VBA也是可以搞定的,虽然J哥没试过,但我觉得代码量肯定比Python多,毕竟Python只要6行代码啊!

往期回顾

  1. 实战|Python轻松实现动态网页爬虫(附详细源码)
  2. 实战|Python轻松实现地图可视化(附详细源码)
  3. 实战|Python轻松实现PDF格式转换(附详细源码)
  4. 实战|Python轻松实现批量图片文字识别(附详细源码)
  5. 实战|手把手教你用Python爬虫(附详细源码)
  6. 实战|Python轻松实现绘制词云图(附详细源码)
  7. 实战|Python爬虫并用Flask框架搭建可视化网站

42c30c1436b7fb2c2d79deadfd45c9b1.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值