合并多个excel文件并按某一或两个特定的列顺序输出

今天要写的就是工作中遇到的,就是个小麻烦而已,很容易解决的,希望能帮到你们。

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 结果如下

在这里插入图片描述
输出的数据,如图中所示,我隐藏一些列,为了看到合并的数据与初始源文件顺序一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值