求助:Python批量导入数百个Excel指定列数据并转置导出
解决Excel数据批量转置与合并问题
嘿,你已经搞定了最麻烦的文件遍历部分,剩下的转置和DataFrame合并其实没那么复杂!我来帮你把代码捋顺,解决当前的瓶颈。
先说说你现有代码的小问题
你循环里的df = []会每次清空之前的数据,相当于白忙活了前面的遍历;而且现在只是打印数据,没有把每个文件的实体、指标和答案结构化地存起来,自然没法转置和合并。
调整后的完整代码
我帮你重新写了代码,直接实现“提取指定列→转置→合并导出”的需求:
import pandas as pd import glob import os # 设置数据文件夹路径 path = r'C:\Users\data' # 用glob批量获取所有xlsx文件(比手动判断后缀更靠谱) files_xls = glob.glob(os.path.join(path, "*.xlsx")) # 第一步:从第一个文件提取所有指标名称,作为最终表格的行索引 first_data = pd.read_excel(files_xls[0], 'Assessment') answers_to_copy = list(range(20, 32)) + list(range(33, 113)) # 获取指定行的指标名称列表 indicators = first_data['IndicatorName'].iloc[answers_to_copy].tolist() # 初始化最终DataFrame:行是指标,后续每个文件的实体作为列 final_df = pd.DataFrame(index=indicators) # 第二步:遍历每个文件,提取数据并添加到最终表格 for f in files_xls: data = pd.read_excel(f, 'Assessment') # 获取当前文件的实体名称(来自Definition列第12行,因为iloc是从0开始计数) entity_name = data['Definition'].iloc[11] # 获取对应指标的答案列表 answers = data['Answer'].iloc[answers_to_copy].tolist() # 将当前实体的答案作为一列添加到最终表格,完成转置效果 final_df[entity_name] = answers # 第三步:导出转置合并后的结果到新Excel final_df.to_excel(os.path.join(path, '合并转置结果.xlsx'), index=True)
代码逻辑说明
- 指标先行:先从第一个文件提取所有指标作为行,保证所有文件的指标顺序统一,避免转置后混乱
- 列对应实体:每个Excel文件对应一个实体,把它的所有答案作为一列添加到总表格,天然实现了“行转列”的需求
- 批量合并:循环过程中自动把每个文件的数据追加到总DataFrame,不用手动处理拼接逻辑
额外小提示
- 如果担心不同文件的指标数量/顺序不一致,可以在循环里加个判断:比如对比当前文件的指标和初始列表是否一致,不一致就打印文件名提醒你
- 如果遇到实体名称重复的情况,可以把文件名和实体名拼接起来(比如
entity_name = f"{os.path.basename(f)}_{entity_name}"),避免列名冲突
内容的提问来源于stack exchange,提问作者user9118870
相关产品推荐
相关产品推荐

