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

Python脚本合并多文件夹Excel至DataFrame时遇索引重排错误

解决Reindexing only valid with uniquely valued Index objects错误并实现多Excel文件合并

错误原因分析

你的代码核心问题在于逻辑错位:

  • 初始化main_df时指定了目标数据列,但后续拼接的entry_df是将整个Excel的DataFrame作为单元格值存入'Data'列,两者结构完全不匹配,concat时Pandas尝试对齐索引和列,触发索引唯一性校验失败的错误。
  • 另外,你试图把DataFrame作为单元格值存储的方式不符合合并数据的需求,正确的做法应该是给每个Excel的数据添加来源文件列后,直接合并行。

修正后的完整代码

import os
import pandas as pd

def read_excel_files_in_folder(folder_path):
    data_list = []
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            if file.endswith(".xlsx"):
                file_path = os.path.join(root, file)
                df = pd.read_excel(file_path)

                # 去重
                df = df.drop_duplicates()

                # 清理字符串列的首尾空格
                df = df.apply(lambda x: x.str.strip() if x.dtype == "O" else x)

                # 添加来源文件路径列
                df['Source_File'] = file_path

                data_list.append(df)
    return data_list

def main(input_folder, output_csv):
    # 读取所有Excel数据,返回DataFrame列表
    df_list = read_excel_files_in_folder(input_folder)

    if not df_list:
        print("未找到任何Excel文件")
        return

    # 合并所有DataFrame,自动对齐列
    main_df = pd.concat(df_list, ignore_index=True)

    # 如果你需要指定保留的列,可以在这里筛选(替换成你的目标列)
    # desired_columns = ["列1", "列2", "Source_File"]
    # main_df = main_df[desired_columns]

    # 保存为CSV
    output_path = os.path.join(output_csv, 'Datalab_output_data.csv')
    main_df.to_csv(output_path, index=False, encoding='utf-8-sig')
    print(f"文件已保存至: {output_path}")

if __name__ == "__main__":
    input_folder = r"C:\Users\Edopi\OneDrive\Desktop\2022_2023"
    output_csv = r'C:\Users\Edopi\OneDrive\Desktop\2023-24b-fai1-adsai-EdoardoPierezza231412\Deliverables\Data_lab_preparetion'
    main(input_folder, output_csv)

关键修正点

  • 调整read_excel_files_in_folder函数:不再返回包含File和Data的字典列表,而是直接返回添加了Source_File列的DataFrame列表,每个DataFrame对应一个Excel文件的内容。
  • 合并逻辑简化:直接用pd.concat合并所有DataFrame,ignore_index=True重置索引,避免索引冲突。
  • 可选列筛选:如果需要指定保留的列,可以取消注释代码中的列筛选部分,替换为你的目标列名。
  • 添加空列表判断:防止没有找到Excel文件时出现错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:52:14