You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pandas将多Excel文件指定列批量写入主文件C列起始位置

问题描述

我是Stack Overflow及Python/pandas的新手,需要实现如下报表处理需求:

  • 遍历files/Daily_Reports文件夹下所有.xlsx格式文件
  • 提取每个文件中名为Sales in USD的列
  • 将提取到的列依次写入主文件(master file),写入起始位置为C列,直至所有文件处理完成

当前我编写的代码仅能实现遍历文件并打印对应列的效果,代码如下:

import os
import pandas as pd
import numpy as np

folder = "files/Daily_Reports"
df_total = pd.DataFrame()
files = os.listdir(folder)


def main():

    for file in files:
        if file.endswith(".xlsx"):
            print('loading file {0}.....'.format(file))
            df = pd.read_excel(f'{folder}/{file}')
            print(df["Sales in USD"])


if __name__ == "__main__":
    main()
解决方案

原有代码只完成了文件遍历和列打印的逻辑,缺少列收集、主文件读写、列位置对齐的处理,调整后的可直接运行代码如下:

import os
import pandas as pd

folder = "files/Daily_Reports"
# 替换为你的主文件实际存储路径
master_file_path = "master.xlsx"
sales_columns = []
# 提取的列自动加文件名后缀,避免多文件同名列被覆盖
use_file_as_col_suffix = True

def main():
    for file in os.listdir(folder):
        # 过滤xlsx文件,跳过Excel打开时生成的~$开头临时文件
        if file.endswith(".xlsx") and not file.startswith("~$"):
            print(f'loading file {file}.....')
            file_path = os.path.join(folder, file)
            df = pd.read_excel(file_path)
            # 提取目标列并重置索引,避免拼接时行错位
            sales_col = df["Sales in USD"].reset_index(drop=True)
            if use_file_as_col_suffix:
                sales_col.name = f"Sales in USD_{os.path.splitext(file)[0]}"
            sales_columns.append(sales_col)
    
    # 读取主文件原有内容,不存在则新建空表
    if os.path.exists(master_file_path):
        df_master = pd.read_excel(master_file_path)
    else:
        df_master = pd.DataFrame()
    
    # 不足2列则补空列,保证写入起始位置为C列(对应第3列,索引从0开始为2)
    while len(df_master.columns) < 2:
        df_master[f"temp_empty_col_{len(df_master.columns)}"] = pd.NA
    
    # 所有提取到的销售列依次拼接到主表中
    for col in sales_columns:
        df_master = pd.concat([df_master, col], axis=1)
    
    # 写回主文件,不写入pandas自动生成的行索引
    df_master.to_excel(master_file_path, index=False)
    print(f"处理完成,共写入{len(sales_columns)}列销售数据到主文件")

if __name__ == "__main__":
    main()
注意事项
  • 路径拼接使用os.path.join替代手动字符串拼接,兼容Windows、macOS、Linux不同系统的路径分隔符规则
  • 自动过滤Excel打开时生成的临时文件,避免读取文件时报权限错误或格式错误
  • 默认给提取的列加上来源文件名作为后缀,如果不需要可以把use_file_as_col_suffix改为False
  • 如果你的主文件A、B列本身已有内容,代码会自动保留原有内容,新的销售数据从C列开始依次往后排列
  • 提取列时做了索引重置,避免不同文件行数、行索引不一致导致拼接后数据错位

内容的提问来源于stack exchange,提问作者Joao Pedro Flausino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 22:09:20