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

从Excel多工作表导入数据并合并为带自定义列名DataFrame的问题

实现方案

你只需要在循环内部补充列名提取、列赋值的逻辑即可,具体修改如下:

完整可运行代码

import pandas as pd

file = r'C:\Users\pazam\OneDrive\Desktop\neuromastCount\sf\Final_Raw.xlsx' #SF
path = r'C:\Users\pazam\OneDrive\Desktop\neuromastCount\sf' 

results_raw = pd.DataFrame()

for i in range(19): # 遍历19个工作表
    # 读取N列的目标数据
    df = pd.read_excel(file, usecols='N',skiprows = range(0,37),nrows=36000,engine='openpyxl',header=None, sheet_name=i)
    # 读取G列第一行作为列名
    trt = pd.read_excel(file, usecols='G',nrows=1,engine='openpyxl',header=None, sheet_name=i)
    # 提取列名字符串
    col_name = trt.iloc[0,0]
    # 将单列数据赋值给结果表的新列
    results_raw[col_name] = df.iloc[:,0]

raw_csv = path+"/results_raw.csv"
# 加index=False避免导出的CSV多出来无用的行索引列,需要保留索引可以删除该参数
results_raw.to_csv(raw_csv, index=False)

性能优化方案

你原代码每个工作表会重复读取两次Excel,文件较大时效率很低,可以调整为每个工作表只读取一次,一次性取出需要的两列数据:

import pandas as pd

file = r'C:\Users\pazam\OneDrive\Desktop\neuromastCount\sf\Final_Raw.xlsx' #SF
path = r'C:\Users\pazam\OneDrive\Desktop\neuromastCount\sf' 

results_raw = pd.DataFrame()

for i in range(19):
    # 一次读取G、N两列的所有需要行,避免重复IO
    sheet_df = pd.read_excel(
        file, 
        usecols=['G', 'N'],
        nrows=36037, # 覆盖G1到N36037的所有需要读取的范围
        engine='openpyxl',
        header=None, 
        sheet_name=i
    )
    # 提取列名:G列第0行对应Excel的第一行
    col_name = sheet_df.iloc[0, 0]
    # 提取N列数据:从第37行(对应Excel的第38行)开始取36000行
    col_data = sheet_df.iloc[37:37+36000, 1].reset_index(drop=True)
    # 赋值到结果表
    results_raw[col_name] = col_data

results_raw.to_csv(path+"/results_raw.csv", index=False)

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:45:03