6. 使用python将多个Excel文件合并到同一个excel-附代码解析

【目录】

文章目录

  • 6. 使用python将多个Excel文件合并到同一个excel-附代码解析
    • 1. 目标任务
    • 2. 结果展示
    • 3. 代码示例
    • 4. 代码解析
      • 4.1 导入库
      • 4.2 调用库的类、函数、变量语法
      • 4.3 os.listdir-返回目录中的文件名列表
      • 4.4 startswith-用于判断一个字符串是否以指定的前缀开头
      • 4.5 endswith-用于判断一个字符串是否以指定的后缀结束
      • 4.6 列表名.append向列表中增加元素
      • 4.7 pd.read_excel读取Excel文件
      • 4.8 将读取到的Excel数据添加到列表里
      • 4.9 pd.concat合并Pandas数据
      • 4.10 DataFrame.to_excel-将 DataFrame 保存为 excel 文件
      • 4.11 DataFrame.shape-查看 DataFrame 的行数和列数。
    • 5. 总结

【正文】

6. 使用python将多个Excel文件合并到同一个excel-附代码解析

1. 目标任务

某文件夹中有如下5个Excel:

在这里插入图片描述
在这里插入图片描述

销售表-1月.xlsx的内容如下:

在这里插入图片描述

5个Excel仅数据不一致,框架内容相同。

目标任务是将5个Excel合并成一个Excel。

2. 结果展示

在这里插入图片描述

3. 代码示例

源代码文件:6.合并多个Excel.py

import pandas as pd
import os
data_list = []# os.listdir(".")返回目录中的文件名列表
# 用for循环遍历文件名列表中的每个文件名,赋值给变量filename
for filename in os.listdir("."):# 判断文件名是否以"销售表-"开头并且以".xlsx"结尾if filename.startswith("销售表-") and filename.endswith(".xlsx"):# pd.read_excel(filename)读取Excel文件,返回一个DataFrame对象# 列表名.append将DataFrame写入列表data_list.append(pd.read_excel(filename))# concat合并Pandas数据
data_all =pd.concat(data_list)
# 将 DataFrame 保存为 excel 文件
data_all.to_excel("年度销售表.xlsx",index=False)# 查看 DataFrame 的行数和列数。
rows = data_all.shape
print("查看行数与列数:", rows)
print("恭喜你,合并完成!")

【终端输出】

查看行数与列数: (25, 4)
恭喜你,合并完成!

4. 代码解析

4.1 导入库

import pandas as pd

导入pandas库,并将其别名设置为pd

as是一个关键字,用于给导入库指定一个别名。

别名的作用是引用pandas库中的函数和类,不必每次都写完整的pandas,可以用别名pd代替。

import os

导入os库,os库用于操作文件和目录。

data_list = []

创建一个空列表,用于存储后面读取的Excel数据。

4.2 调用库的类、函数、变量语法

  • 调用库的类:库名.类名( ),如 csv.DictReader()
  • 调用库的函数:库名.函数名( ),如 os.mkdir()
  • 调用库的变量:库名.变量名,如 os.name

【总结】

  • 不管调用什么,库名后都需要紧跟一个英文小圆点.
  • 调用类和函数需要加英文圆括号( )
  • 调用变量不用加英文圆括号( ),因为变量没有参数可以传递。

4.3 os.listdir-返回目录中的文件名列表

listdir()是一个Python的内置函数,用于返回指定目录中所有文件和文件夹名称的列表。

【语法】

os.listdir(path)

【参数】

path[pɑːθ]:路径。

path表示路径,指文件和文件夹的目录路径。

path可以是相对路径或绝对路径。

【返回值】

返回的数据类型是列表。

列表中的每个元素都是字符串类型。

如果指定的路径不存在或不是一个目录,则会引发OSError异常

【相对路径】

import os
os.listdir(".")

【终端输出】

['1.ipynb','销售表-1月.xlsx','销售表-2月.xlsx','销售表-3月.xlsx','销售表-4月.xlsx','销售表-5月.xlsx']
  • os是库名。
  • .英文小圆点,库后接一个小圆点表示调用。
  • listdir函数名,作用是返回目录中所有文件和文件夹名称的列表。
  • 英文圆括号( )
  • ".",这里的表示当前工作目录。

【绝对路径】

import os
os.listdir("D:\安迪笔记\Excel合并")

【终端输出】

['1.ipynb','年度销售表.xlsx','销售表-1月.xlsx','销售表-2月.xlsx','销售表-3月.xlsx','销售表-4月.xlsx','销售表-5月.xlsx']

上述代码中的.也可以换成绝对路径"D:\安迪笔记\Excel合并"

"D:\安迪笔记\Excel合并"是我表格文件的存储路径,你需要换成你的路径。

os库的相关知识可参考下面的链接:

72. import 导入标准模块(os模块)

路径的相关知识可参考下面的链接:

67. Python的绝对路径

68. Python的相对路径

for filename in os.listdir("."):print(filename)

【终端输出】

1.ipynb
年度销售表.xlsx
销售表-1月.xlsx
销售表-2月.xlsx
销售表-3月.xlsx
销售表-4月.xlsx
销售表-5月.xlsx
  • os.listdir(".")得到的是一个文件名列表。
  • 用for循环遍历文件名列表中的每个文件名,赋值给变量filename
  • filename的数据类型为字符串类型。
filename = '1.ipynb'
filename = '销售表-1月.xlsx'
filename = '销售表-2月.xlsx'
filename = '销售表-3月.xlsx'
filename = '销售表-4月.xlsx'
filename = '销售表-5月.xlsx'

4.4 startswith-用于判断一个字符串是否以指定的前缀开头

startswith() 是 Python 字符串方法之一,用于判断一个字符串是否以指定的前缀开头

【语法】

string.startswith(prefix, start, end)

string表示一个具体的字符串。

startswith是方法名。

【参数】

  • prefix:必需参数,表示要检查的前缀,可以是一个字符或一个字符串。
  • start:可选参数,指定开始检查的起始位置,默认为 0。
  • end:可选参数,指定结束检查的位置,默认为字符串的长度。

【返回值】

返回一个布尔值,表示字符串是否以指定的前缀开始。

如果字符串以指定的前缀开始,则返回 True;否则返回 False。

【代码示例】

string = "安迪python学习笔记"# 判断字符串是否以安迪开头
# 是输出 True
print(string.startswith("安迪")) # 字符串索引从0开始编号
# 索引2对应字符串的第3个字符
# 从字符串索引为2的位置开始检查
# 判断字符串第3位(包含)之后是否为python
# 是,输出 True
print(string.startswith("python", 2))  # 检查范围为字符串索引2到索引8
print(string.startswith("Python", 2, 8))  # 这里是大写,输出False
print(string.startswith("python", 2, 8))  # 输出 True

【终端输出】

True
True
False
True

【实操练习】

filename = '销售表-1月.xlsx'
print(filename.startswith("销售表-")) 

【终端输出】

True

filename是变量名,数据类型是字符串。

返回True表示字符串以销售表-开头。

filename = '1.ipynb'
print(filename.startswith("销售表-"))

【终端输出】

False

返回False表示字符串不是以销售表-开头。

for filename in os.listdir("."):print(filename.startswith("销售表-"))

【终端输出】

False
True
True
True
True
True

4.5 endswith-用于判断一个字符串是否以指定的后缀结束

【语法】

string.endswith(suffix, start, end)

【参数】

  • suffix:必需参数,表示要检查的后缀,可以是字符串或元组类型。如果是元组,则会依次检查后缀是否包含在元组中的任意一个。
  • start:可选参数,指定开始检查的索引位置,默认为 0,表示从字符串的开头开始。
  • end:可选参数,指定结束检查的索引位置,默认为字符串的长度,表示一直检查到字符串的末尾。

【返回值】

返回一个布尔值,表示字符串是否以指定的后缀结束。

如果字符串以指定的后缀结束,则返回 True;否则返回 False。

【实操练习】

filename = '销售表-1月.xlsx'
print(filename.endswith(".xlsx"))

【终端输出】

True

返回True表示字符串以.xlsx结束。

filename = '1.ipynb'
print(filename.endswith(".xlsx"))

【终端输出】

False

返回False表示字符串不是以.xlsx结束。

for filename in os.listdir("."):print(filename.endswith(".xlsx"))

【终端输出】

False
True
True
True
True
True
if filename.startswith("销售表-") and filename.endswith(".xlsx"):

filenamee.startswith("销售表-")检查文件名是否以销售表-开头。
filename.endswith(".xlsx") 检查文件名是否以.xlsx结尾。
如果文件名符合上述两个条件,则执行以下代码块。

判断文件名是否以"销售表-“开头并且以”.xlsx"结尾

data_list.append(pd.read_excel(filename))

4.6 列表名.append向列表中增加元素

append函数用于在列表的末尾添加一个元素。

【语法】

列表名.append(要添加的元素)

【代码示例1】

data_list  = []
data_list.append("张三")
print(data_list)

【终端输出】

['张三']

【代码示例2】

data_list  = []
for i in range(3):data_list.append(i)
print(data_list)

【终端输出】

[0, 1, 2]

4.7 pd.read_excel读取Excel文件

read_excel是pandas 库中一个方法。

作用是读取 Excel 文件中的数据。

【语法】

pandas.read_excel(io)

read_excel方法提供了许多参数,这里仅介绍一个路径参数。

【参数】

io:要读取的Excel文件的路径(字符串类型)。

【返回值】

返回一个DataFrame对象。

【代码示例】

pd.read_excel('销售表-1月.xlsx')

【终端输出】

日期员工编号员工姓名销售额
0449273001刘一1000
1449283002陈二2000
2449293003张三3000
3449303004李四4000
4449313005王五5000
  • pd库名。
  • .英文小圆点,作用是调用库的方法。
  • read_excel方法名,作用是读取Excel文件。
  • 参数'销售表-1月.xlsx',表示要读取的Excel文件的路径。
print(type(pd.read_excel('销售表-1月.xlsx')))

【终端输出】

<class 'pandas.core.frame.DataFrame'>

返回的是DataFrame对象。

【思路解析】

通过4.5代码我们知道我当前的文件夹里有6个文件,如下所示:

filename = '1.ipynb'
filename = '销售表-1月.xlsx'
filename = '销售表-2月.xlsx'
filename = '销售表-3月.xlsx'
filename = '销售表-4月.xlsx'
filename = '销售表-5月.xlsx'

我的目标任务是要汇总5个Excel表格,因此我用了一个if条件判断语句选取了要汇总的文件路径,排除了不需要汇总的文件路径。

if filename.startswith("销售表-") and filename.endswith(".xlsx"):

filename = '1.ipynb'时,if条件判断语句的结果为False,它不会执行后面的读取Excel代码。

filename = '销售表-1月.xlsx'时,if条件判断语句的结果为True,执行后面的读取Excel代码。

【实操练习】

for filename in os.listdir("."):if filename.startswith("销售表-") and filename.endswith(".xlsx"):data = pd.read_excel(filename)print(data)

【终端输出】

      日期  员工编号 员工姓名   销售额
0  44927  3001   刘一  1000
1  44928  3002   陈二  2000
2  44929  3003   张三  3000
3  44930  3004   李四  4000
4  44931  3005   王五  5000日期  员工编号 员工姓名   销售额
0  44958  3001   刘一  1000
1  44959  3002   陈二  2000
2  44960  3003   张三  3000
3  44961  3004   李四  4000
4  44962  3005   王五  5000日期  员工编号 员工姓名   销售额
0  44986  3001   刘一  1000
1  44987  3002   陈二  2000
2  44988  3003   张三  3000
3  44989  3004   李四  4000
4  44990  3005   王五  5000日期  员工编号 员工姓名   销售额
0  45017  3001   刘一  1000
1  45018  3002   陈二  2000
2  45019  3003   张三  3000
3  45020  3004   李四  4000
4  45021  3005   王五  5000日期  员工编号 员工姓名   销售额
0  45047  3001   刘一  1000
1  45048  3002   陈二  2000
2  45049  3003   张三  3000
3  45050  3004   李四  4000
4  45051  3005   王五  5000

通过pd.read_excel(filename)读取到的数据如上所示。

data = pd.read_excel(filename)
  • data变量名,数据类型为DataFrame
  • pd库名。
  • .英文小圆点,作用是调用库的方法。
  • read_excel方法名,作用是读取Excel文件。
  • 参数filename,表示要读取的Excel文件的路径。

4.8 将读取到的Excel数据添加到列表里

data_list = []
for filename in os.listdir("."):if filename.startswith("销售表-") and filename.endswith(".xlsx"):data_list.append(pd.read_excel(filename))
print(data_list)

【终端输出】

[      日期  员工编号 员工姓名   销售额
0  44927  3001   刘一  1000
1  44928  3002   陈二  2000
2  44929  3003   张三  3000
3  44930  3004   李四  4000
4  44931  3005   王五  5000,       日期  员工编号 员工姓名   销售额
0  44958  3001   刘一  1000
1  44959  3002   陈二  2000
2  44960  3003   张三  3000
3  44961  3004   李四  4000
4  44962  3005   王五  5000,       日期  员工编号 员工姓名   销售额
0  44986  3001   刘一  1000
1  44987  3002   陈二  2000
2  44988  3003   张三  3000
3  44989  3004   李四  4000
4  44990  3005   王五  5000,       日期  员工编号 员工姓名   销售额
0  45017  3001   刘一  1000
1  45018  3002   陈二  2000
2  45019  3003   张三  3000
3  45020  3004   李四  4000
4  45021  3005   王五  5000,       日期  员工编号 员工姓名   销售额
0  45047  3001   刘一  1000
1  45048  3002   陈二  2000
2  45049  3003   张三  3000
3  45050  3004   李四  4000
4  45051  3005   王五  5000]

观察输出结果,注意输出的列表中包含5个列名:日期 员工编号 员工姓名 销售额

data_list.append(pd.read_excel(filename))
  • data_list列表名。

  • .英文小圆点。

  • append函数名,作用是向列表增加元素。

  • pd是库名。

  • read_excel读取 Excel 文件中的数据。

  • filename文件路径。

  • pd.read_excel(filename)得到的是一个DataFrame对象。

4.9 pd.concat合并Pandas数据

concat ()方法用于连接两个或多个数组。

【语法】

pandas.concat(objs, axis=0, join='outer', ignore_index=False)

【参数】

objs:要合并的 Pandas 数据结构,可以是 Series、DataFrame 或者 Panel 对象的列表或字典。
axis:指定合并的轴向,默认为 0,表示按行进行合并;如果设置为 1,表示按列进行合并。
join:指定合并的方式,默认为 ‘outer’,表示按照索引的并集进行合并;如果设置为 ‘inner’,表示按照索引的交集进行合并。
ignore_index:是否忽略原始对象的索引,默认为 False。如果设置为 True,则会创建一个新的整数索引。

【代码示例】

import pandas as pd# 创建两个 DataFrame 对象
df1 = pd.DataFrame({'姓名': ['张三', '李四', '王五'], '性别': ['男', '男', '女']})
df2 = pd.DataFrame({'姓名': ['赵六', '孙七', '周八'], '性别': ['男', '男', '女']})# 按行合并两个 DataFrame
result = pd.concat([df1, df2], axis=0, ignore_index=True)
print(result)

【终端输出】

   姓名 性别
0  张三  男
1  李四  男
2  王五  女
3  赵六  男
4  孙七  男
5  周八  女

上述代码要合并的是DataFrame对象。

【实操练习】

data_all =pd.concat(data_list)
print(data_all)
print(type(data_all))

【终端输出】

      日期  员工编号 员工姓名   销售额
0  44927  3001   刘一  1000
1  44928  3002   陈二  2000
2  44929  3003   张三  3000
3  44930  3004   李四  4000
4  44931  3005   王五  5000
0  44958  3001   刘一  1000
1  44959  3002   陈二  2000
2  44960  3003   张三  3000
3  44961  3004   李四  4000
4  44962  3005   王五  5000
0  44986  3001   刘一  1000
1  44987  3002   陈二  2000
2  44988  3003   张三  3000
3  44989  3004   李四  4000
4  44990  3005   王五  5000
0  45017  3001   刘一  1000
1  45018  3002   陈二  2000
2  45019  3003   张三  3000
3  45020  3004   李四  4000
4  45021  3005   王五  5000
0  45047  3001   刘一  1000
1  45048  3002   陈二  2000
2  45049  3003   张三  3000
3  45050  3004   李四  4000
4  45051  3005   王五  5000
<class 'pandas.core.frame.DataFrame'>

观察输出结果,注意输出的列表中仅包含1个列名:日期 员工编号 员工姓名 销售额

data_all =pd.concat(data_list)

  • data_all变量名,DataFrame对象,存储合并后的数据。
  • pd库名。
  • .英文小圆点。
  • concat方法名,作用是合并Pandas数据。
  • data_list要合并的数据。

4.10 DataFrame.to_excel-将 DataFrame 保存为 excel 文件

【语法】

DataFrame.to_excel(path, index=False)

DataFrame.to_excel将 DataFrame 保存为 excel 文件。

【参数】

path路径参数,将DataFrame保存到指定的路径下。

index可选参数。

index=True,保存索引列。

index=False,不保存索引列。

【实操练习】

data_all.to_excel("年度销售表.xlsx",index=False)
  • data_all变量名,DataFrame对象,存储了合并后的数据。
  • .英文小圆点。
  • to_excel方法名,作用是将 DataFrame 保存为 excel 文件。
  • "年度销售表.xlsx"路径参数,即汇总后Excel文件名。
  • index=False不保存索引列。

运行上面的代码后,当前文件夹下会生成一个名为年度销售表.xlsx文件。

在这里插入图片描述

4.11 DataFrame.shape-查看 DataFrame 的行数和列数。

shape 是 Pandas 库中的 DataFrame 对象的属性。

调用DataFrame.shape 会返回一个元组。

该元组包含两个整数值,分别表示 DataFrame 的行数和列数。

【代码示例】

import pandas as pddata = {'姓名': ['张三', '李四', '王五'],'年龄': [25, 30, 35]}df = pd.DataFrame(data)
print(df)
print(df.shape)  # 输出 (3, 3)

【终端输出】

   姓名  年龄
0  张三  25
1  李四  30
2  王五  35
(3, 2)

元组的3表示DataFrame对象有3行。
元组的2表示DataFrame对象有2列。

注意不包含列索引和行索引。

在这里插入图片描述

【实操练习】

rows = data_all.shape
print("查看行数与列数:", rows)

【终端输出】

查看行数与列数: (25, 4)

【备注】

联系作者回复【6.合并多个Excel】领取源文件和表格。

5. 总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/84480.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.Redis数据类型的编码方式

数据结构和内部编码 type 命令实际返回的就是当前键的数据结构类型&#xff0c;它们分别是&#xff1a;string&#xff08;字符串&#xff09;、list&#xff08;列表&#xff09;、hash&#xff08;哈希&#xff09;、set&#xff08;集合&#xff09;、zset&#xff08;有序…

1.Flink源码编译

目录 1.环境版本 1.1 jdk 1.2.maven 1.3.node 1.4.scala 2.下载flink源码 3.编译源码 4.idea打开flink源码 5.运行wordcount 1.环境版本 软件地址 链接&#xff1a;https://pan.baidu.com/s/1ZxYydR8rBfpLCcIdaOzxVg 提取码&#xff1a;12xq 1.1 jdk 1.2 maven 1.…

IDEA项目实践——VUE介绍与案例分析

系列文章目录 IDEA项目实践——JavaWeb简介以及Servlet编程实战 IDEA项目实践——Spring集成mybatis、spring当中的事务 IDEA项目实践——Spring当中的切面AOP IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——Spring框架简介&#xff0c;以及IOC注解 I…

使用 Transformer 和 Amazon OpenSearch Service 构建基于列的语义搜索引擎

在数据湖中&#xff0c;对于数据清理和注释、架构匹配、数据发现和跨多个数据来源进行分析等许多操作&#xff0c;查找相似的列有着重要的应用。如果不能从多个不同的来源准确查找和分析数据&#xff0c;就会严重拉低效率&#xff0c;不论是数据科学家、医学研究人员、学者&…

用MFC打开外部程序

在MFC&#xff08;Microsoft Foundation Classes&#xff09;中&#xff0c;你可以使用ShellExecute函数来打开Notepad并加载指定的文件。ShellExecute函数是Windows API的一部分&#xff0c;它可以执行与操作系统相关的操作&#xff0c;例如打开文件、运行程序等。 以下是在M…

【GeoDa实用技巧100例】022:geoda生成空间权重矩阵(邻接矩阵、距离矩阵)

geoda生成空间权重矩阵(邻接矩阵、距离矩阵),车式矩阵、后式矩阵、K邻接矩阵。 文章目录 一、概述二、“车式”邻接的gal文档生成三、“后式”邻接gal文档生成四、k最近邻居gat文档生成五、查看gal和gat文档一、概述 空间权重矩阵(或相应的表格形式)一般需要用计算机软件生…

常见的时序数据库

1.概念 时序数据库全称为时间序列数据库。时间序列数据库指主要用于处理带时间标签&#xff08;按照时间的顺序变化&#xff0c;即时间序列化&#xff09;的数据&#xff0c;带时间标签的数据也称为时间序列数据。 时间序列数据主要由电力行业、化工行业、气象行业、地理信息…

AI 绘画Stable Diffusion 研究(十六)SD Hypernetwork详解

大家好&#xff0c;我是风雨无阻。 本期内容&#xff1a; 什么是 Hypernetwork&#xff1f;Hypernetwork 与其他模型的区别&#xff1f;Hypernetwork 原理Hypernetwork 如何下载安装&#xff1f;Hypernetwork 如何使用&#xff1f; 在上一篇文章中&#xff0c;我们详细介绍了 …

[halcon] 局部图片保存 gen_circle 和 gen_rectangle2 对比 这怕不是bug吧

背景 我想实现一个功能&#xff0c;获取图片中瑕疵的位置&#xff0c;将瑕疵周边的一块区域抠图并保存。 上代码 一开始我代码这么写的&#xff1a; gen_circle (Rectangle, Row[i], Column[i], 256) reduce_domain(Image,Rectangle,GrayEllipse) crop_domain(GrayEllipse,…

Spring Boot多环境指定yml或者properties

Spring Boot多环境指定yml或者properties 文章目录 Spring Boot多环境指定yml或者properties加载顺序配置指定某个yml 加载顺序 ● application-local.properties ● application.properties ● application-local.yml ● application.yml application.propertes server.port…

postgresql-字符函数

postgresql-字符函数 字符串连接字符与编码字符串长度大小写转换子串查找与替换截断与填充字符串格式化MD5 值字符串拆分字符串反转 字符串连接 concat(str, …)函数用于连接字符串&#xff0c;并且忽略其中的 NULL 参数&#xff1b;concat_ws(sep, str, …) 函数使用指定分隔…

用大白话来讲讲多线程的知识架构

感觉多线程的知识又多又杂&#xff0c;自从接触java&#xff0c;就在一遍一遍捋脉络和深入学习。现在将这次的学习成果展示如下。 什么是多线程&#xff1f; 操作系统运行一个程序&#xff0c;就是一个线程。同时运行多个程序&#xff0c;就是多线程。即在同一时间&#xff0…