今天要写的就是工作中遇到的,就是个小麻烦而已,很容易解决的,希望能帮到你们。
01 确定你要输出的excel文件的初始顺序
比如我这次的案例,图中红色箭头标记的两列为初始序列,其他excel数据合并时都会按照这个输出。
其他excel部分数据展示
可以看到数据结构和源文件的数据结构一直,就是顺序不一致,且不在一个文件中,我们要做的就是将多个这样的excel文件合并成一个。
02 不废话,上才艺
```python
import os
import pandas as pd
# 将多个excel文件放一个文件夹里面
pwd = 'C:\\Users\\86188\\Desktop\\test'
# 新建列表,存放文件名
file_list = []
# 合并多个excel文件按某一或两个特定的列顺序输出源文件,本次案例是两列
file_path = 'C:\\Users\\86188\\Desktop\\excel源文件.xlsx' # 源文件路径不要和其他合并的excel文件在同一个路径下
df1 = pd.read_excel(file_path)
df5 = df1['Unnamed: 0'].ffill(axis=0)
# 按列用上一个非nan值进行填充,当axis=1时按行填充,因为第一列数据不完整,你的excel文件完整完全不需要这一步和下一步
df6 = pd.concat([df5, df1.iloc[:, 1:]], axis=1)
# 新建列表存放每个文件数据(依次读取多个相同结构的Excel文件并创建DataFrame)
dfs = []
for root, dirs, files in os.walk(pwd): # 第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。
print(root, dirs, files) # 输出看下都是什么信息就会明白了
for file in files:
file_path = os.path.join(root, file)
file_list.append(file_path) # 使用os.path.join(dirpath, name)得到全路径
df = pd.read_excel(file_path) # 将excel转换成DataFrame
df2 = df['Unnamed: 0'].ffill(axis=0) # 按列用上一个非nan值进行填充,当axis=1时按行填充
df3 = pd.concat([df2, df.iloc[:, 1:]], axis=1)
df4 = pd.merge(df6, df3, on=['Unnamed: 0', 'Unnamed: 1']) # 按某两列连接两个dataframe,使其顺序一致,类似于SQL中的联合索引
dfs.append(df4)
# 将多个DataFrame合并为一个
df = pd.concat(dfs, axis=1)
# 将重复的列删除
df = df.loc[:, ~df.columns.duplicated()]
# 写入excel文件,不包含索引数据
df.to_excel('C:\\Users\\86188\\Desktop\\excel合并.xlsx', index=False)
03 结果如下
输出的数据,如图中所示,我隐藏一些列,为了看到合并的数据与初始源文件顺序一致。