从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
相关产品推荐
相关产品推荐

