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

在for循环中动态创建、合并并保存DataFrame的问题求助

问题分析与解决

核心错误原因

你的代码存在多个关键问题,直接导致了报错:

  1. 未读取Excel文件为DataFrame:glob.glob返回的是文件路径字符串,你直接把这些字符串传给pd.merge,而merge要求传入的是Series或DataFrame对象,这是报错的直接原因。
  2. 循环逻辑错误:使用zip会将两个列表的元素一一配对,无法实现每个技术文件与每个等级文件的交叉合并(4*3=12种组合)。
  3. 语法错误:字典键d[level technology]的写法不合法,变量名不能直接拼接,需要用字符串格式化处理。
  4. 文件保存错误:调用d.to_excel是错误的,应该针对每个合并后的DataFrame对象执行保存操作。
  5. 文件分类错误:两个glob使用相同路径,无法区分等级和技术两类数据集,会把所有Excel文件混在一起。

修正后的代码

假设你的等级文件和技术文件可以通过文件名前缀区分(比如等级文件以level_开头,技术文件以tech_开头),或者存放在不同子文件夹,以下是修正后的代码:

import os
import pandas as pd
import glob

# 1. 区分两类文件的路径或文件名,这里以文件名前缀为例
level_files = glob.glob("C:\\path\\level_*.xlsx")  # 匹配所有等级文件
tech_files = glob.glob("C:\\path\\tech_*.xlsx")    # 匹配所有技术文件

# 2. 存储合并后的DataFrame(可选,若不需要保留可省略字典)
merged_dfs = {}

# 3. 嵌套循环实现所有交叉组合的合并
for level_path in level_files:
    # 读取等级文件为DataFrame
    level_df = pd.read_excel(level_path)
    # 提取等级文件名(不含路径和后缀)
    level_name = os.path.splitext(os.path.basename(level_path))[0]
    
    for tech_path in tech_files:
        # 读取技术文件为DataFrame
        tech_df = pd.read_excel(tech_path)
        # 提取技术文件名(不含路径和后缀)
        tech_name = os.path.splitext(os.path.basename(tech_path))[0]
        
        # 按Location列内连接合并
        merged_df = pd.merge(tech_df, level_df, how="inner", on="Location")
        
        # 生成唯一的字典键(可选)
        key = f"{tech_name}_merged_{level_name}"
        merged_dfs[key] = merged_df
        
        # 保存合并后的文件,文件名包含原文件名信息
        save_name = f"{tech_name}_merged_{level_name}.xlsx"
        save_path = os.path.join("C:\\path\\merged_results", save_name)
        # 创建保存目录(如果不存在)
        os.makedirs(os.path.dirname(save_path), exist_ok=True)
        merged_df.to_excel(save_path, index=False)

关键修正点说明

  • 文件读取:每次循环中用pd.read_excel将文件路径转为DataFrame,确保merge的是合法对象。
  • 交叉合并:使用嵌套循环遍历所有等级文件和技术文件的组合,生成4*3=12个合并结果。
  • 文件名处理:用os.path.basename和os.path.splitext提取纯文件名,避免路径干扰,生成清晰的合并文件名。
  • 目录创建:用os.makedirs确保保存目录存在,避免保存时因目录不存在报错。
  • 字典存储:可选保留合并后的DataFrame到字典中,方便后续复用(若不需要可省略字典相关代码)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:03:18