当我们需要整合多个excel文件时,可能需要将它们合并成一个文件。本篇教程将介绍如何使用Python横向合并多个excel文件的实例。
步骤 1:安装所需的模块
在开始之前,需要确保安装了pandas、openpyxl和xlrd模块。可以使用以下命令进行安装:
pip install pandas openpyxl xlrd
步骤 2:读入多个Excel文件
读取多个Excel文件,我们可以先创建一个空的pandas DataFrame(DataFrame是pandas的核心数据结构之一用于处理结构化数据),然后将每个Excel文件读入并添加到DataFrame中。
以下是示例代码:
import pandas as pd
import os
# 指定文件所在的目录
path = r'C:\Users\Administrator\Desktop\Excel_files'
# 初始化一个空的DataFrame
excel_data = pd.DataFrame()
# 循环读入file目录下的每个xlsx文件
for file in os.listdir(path):
if file.endswith('.xlsx'):
df = pd.read_excel(os.path.join(path, file))
excel_data = pd.concat([excel_data, df], axis=1)
# 显示合并后的结果
print(excel_data.head())
在这个示例中,我们使用os模块列出指定目录下的所有文件,然后使用pandas读入每个xlsx文件,将它们合并到一个DataFrame中,并使用print()函数显示结果。
步骤 3:将结果保存到一个新的Excel文件
最后,将合并后的数据保存到一个新的Excel文件。这可以通过使用pandas.DataFrame.to_excel()方法实现。
以下是将结果保存到新文件的示例代码:
# 定义新文件名
outfile = 'merged.xlsx'
# 保存合并数据到新文件
excel_data.to_excel(os.path.join(path, outfile), index=False)
在这个示例中,我们定义了新文件名,并使用to_excel()方法将合并数据保存到新文件中。请注意,这里的index=False表示不保存索引列。
示例说明1:多个Excel文件的列数不一致
假设有两个Excel文件,其中一个包含3列,另一个包含5列。在使用示例代码中的concat()函数合并这两个表格时,会提示错误:“cannot concatenate object of different shape”。为了解决这个问题,我们添加一些预处理步骤:
# 将每个Excel文件转换为Dataframe并将它们存储在字典中
dfs = {}
for file in os.listdir(path):
if file.endswith('.xlsx'):
df = pd.read_excel(os.path.join(path, file))
dfs[file] = df
# 取出所有Dataframe中的列名
cols = set()
for df in dfs.values():
cols.update(df.columns)
# 将所有Dataframe对齐列名
for file in dfs:
diff_cols = cols - set(dfs[file].columns)
for dc in diff_cols:
dfs[file][dc] = pd.Series("", index=dfs[file].index)
# 将所有Dataframe连接为一个大的Dataframe
excel_data = pd.concat([dfs[file] for file in dfs], axis=1, keys=dfs.keys())
在这个示例中,我们首先将每个Excel文件读入,并把它们存储在一个字典中。然后,我们创建一个由所有列名组成的集合,并将字典中每个Dataframe的列与此集合进行比较。如果存在差异,则将空列添加到Dataframe中以对齐列。最后,我们使用concat()函数将所有Dataframe连接为一个大的Dataframe。
示例说明2:多个Excel文件的名称和位置都不同
这个示例将展示如何在路径和文件名都不同的情况下合并Excel文件。我们将使用glob模块查找指定目录下的所有Excel文件,然后将它们合并到一个DataFrame中。
import pandas as pd
import glob
# 定义文件目录
path = r'C:\Users\Administrator\Desktop\Excel_files'
# 使用glob模块查找所有xlsx文件
files = glob.glob(path + "/*.xlsx")
# 初始化一个空的DataFrame
excel_data = pd.DataFrame()
# 循环读取所有Excel文件,将它们添加到DataFrame中
for file in files:
df = pd.read_excel(file)
excel_data = pd.concat([excel_data, df], axis=1)
# 显示合并后的结果
print(excel_data.head())
# 将合并后的Excel数据保存到新文件
merged_file = 'merged_files.xlsx'
excel_data.to_excel(os.path.join(path, merged_file), index=False)
在此示例中,我们使用glob查找目录下所有后缀名为xlsx的文件,并在循环中将它们读入并添加到DataFrame中。最后,我们将结果保存到新文件中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python横向合并excel文件的实例 - Python技术站