【python学习笔记】合并Excel文件

将同一文件中的多个Excel文件合并为一个Excel文件,可以使用Python中的pandas库和os库。其中os用于处理文件路径,pandas用于读取和写入Excel文件。


注意事项

  • 需确保所有Excel文件的结构(列名和列顺序)相同,否则合并时可能会出现错误或数据错位。

示例代码

import os
import pandas as pd

# 定义文件夹路径 folder_path(包含所有Excel文件)
folder_path = '/Users/……' # 替换为你的文件夹路径

# 获取文件夹中所有的Excel文件名并按照名称排序
excel_files = sorted(
    [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')]
                 ) # 使用os.listdir()获取文件夹中的所有文件,并筛选出以.xlsx或.xls结尾的文件

# 创建一个空的DataFrame来存储合并后的数据
combined_df = pd.DataFrame()

# 遍历所有Excel文件并合并
for file in excel_files:
    file_path = os.path.join(folder_path, file) #将文件夹路径和文件名组合成一个完整的文件路径
    df = pd.read_excel(file_path, dtype={'Scode': str}) # 读取Excel文件并确保Scode列以字符串形式读取
    combined_df = pd.concat([combined_df, df], ignore_index=True) # ignore_index=True为合并时重置索引

# 将合并后的数据保存到一个新的Excel文件中
output_file = '/Users/……/combined_excel.xlsx'
combined_df.to_excel(output_file, index=False)

代码说明

os.listdir()

os 模块的一个函数,用于列出指定文件夹中的所有文件和文件夹。返回值是一个列表,包含文件夹中的所有文件和文件夹的名称。

endswith() 

是字符串方法,用于检查字符串是否以指定的后缀结尾。

sorted() 

sorted() 会对列表中的元素进行排序,并返回一个新的排序后的列表。默认情况下是按照字母顺序(字典序)排序。

如果需要按其他规则排序(例如按文件创建时间或修改时间),可以使用 os.path.getmtime() 或 os.path.getctime() 结合 sorted() 的 key 参数。

按文件修改时间排序
import os

# 定义文件夹路径 folder_path(包含所有Excel文件)
folder_path = '/Users/……' # 替换为你的文件夹路径

# 获取文件夹中所有的Excel文件,并按修改时间排序
excel_files = sorted(
    [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')],
    key=lambda x: os.path.getmtime(os.path.join(folder_path, x))
)
按文件创建时间排序
import os

# 定义文件夹路径 folder_path(包含所有Excel文件)
folder_path = '/Users/……' # 替换为你的文件夹路径

# 获取文件夹中所有的Excel文件,并按创建时间排序
excel_files = sorted(
    [f for f in os.listdir(folder_path) if f.endswith('.xlsx') or f.endswith('.xls')],
    key=lambda x: os.path.getctime(os.path.join(folder_path, x))
)

os.path.join() 

os 模块中的一个函数,用于将多个路径组合成一个完整的路径。

pd.read_excel()

是 pandas 库中用于读取 Excel 文件的函数。 

pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, dtype=None, engine=None)
常用参数说明
参数名说明
ioExcel 文件的路径或文件对象(必需参数)。
sheet_name要读取的工作表名称或索引,默认为 0(第一个工作表)。
header指定哪一行作为列名(表头),默认为 0(第一行)。
names自定义列名列表,覆盖文件中的列名。
index_col指定哪一列作为行索引(index),默认为 None(不使用任何列作为索引)。
usecols指定要读取的列,可以是列名列表或列索引列表。
dtype指定列的数据类型,例如 {'列名': str}
engine指定读取引擎,可以是 'openpyxl'.xlsx)或 'xlrd'.xls)。
import pandas as pd

file_path = 'path/to/your/file.xlsx'

# 读取 Excel 文件
df = pd.read_excel(file_path)

# 读取指定工作表(通过名称或索引)
df = pd.read_excel(file_path, sheet_name='Sheet1')  # 通过名称
df = pd.read_excel(file_path, sheet_name=1)         # 通过索引(从 0 开始)

# 自定义列名
df = pd.read_excel(file_path, names=['列1', '列2', '列3'])

# 指定某一列作为索引
df = pd.read_excel(file_path, index_col=0)  # 使用第一列作为索引

# 只读取指定列
df = pd.read_excel(file_path, usecols=['列1', '列2'])  # 通过列名
df = pd.read_excel(file_path, usecols=[0, 1])         # 通过列索引

# 指定列的数据类型
df = pd.read_excel(file_path, dtype={'Scode': str, 'Year': int})

pd.concat() 

是 pandas 中用于合并多个 DataFrame 或 Series 的函数。可以在指定的行或列上将多个对象连接起来。

pd.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, sort=False)
常用参数说明
参数名说明
objs要合并的 DataFrame 或 Series 对象的列表或字典(必需参数)。
axis合并的轴方向,0 表示按行合并(纵向),1 表示按列合并(横向)。
join合并方式,'outer' 表示外连接(默认),'inner' 表示内连接。
ignore_index是否忽略原始索引并生成新的连续索引,默认为 False
keys为合并后的数据添加层次化索引,用于区分原始数据来源。
sort是否对非连接轴进行排序,默认为 False

如果合并的 DataFrame 列名不一致,join='outer' 会保留所有列并用 NaN 填充缺失值,而 join='inner' 只会保留共有的列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值