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

从嵌套字典的Pandas数据框提取指定列至主数据框求助

问题解决:合并嵌套字典中指定Excel工作表的指定列

原代码问题分析

  1. 数据覆盖问题:每次匹配到目标工作表时,直接用df = pd.DataFrame(value1)覆盖已有数据,最终仅保留最后一个符合条件的文件数据,无法实现多文件合并
  2. 列处理不稳健:通过删除列的方式保留目标列,若部分文件缺失colum_1/column2会触发报错,且存在列名拼写错误(colum_1少了一个n)
  3. 初始化冗余:初始创建带ExcelFile列的空DataFrame无意义,后续会被覆盖

修正后的代码

import pandas as pd

def extract_and_merge_data(dict1, process_key):
    '''从嵌套字典中提取指定工作表的column3、column4列,合并为带文件名的主DataFrame'''
    # 初始化列表存储每个文件的结果片段
    df_list = []
    
    for filename, sheet_dict in dict1.items():
        # 检查当前文件是否包含目标工作表
        if process_key in sheet_dict:
            # 提取目标工作表的DataFrame
            sheet_df = sheet_dict[process_key]
            # 仅保留需要的列,确保列顺序符合要求
            target_df = sheet_df[['column3', 'column4']].copy()
            # 添加文件名列(去除后缀)
            target_df['ExcelFile'] = filename.split('.')[0]
            # 将当前文件的结果加入列表
            df_list.append(target_df)
    
    # 合并所有文件的结果为一个主DataFrame
    merged_df = pd.concat(df_list, ignore_index=True)
    return merged_df

# 调用示例
merged_result = extract_and_merge_data(dictionary, 'tab_name')

关键改动说明

  • 使用列表df_list收集每个文件的结果片段,最后通过pd.concat合并,彻底避免数据覆盖问题
  • 直接通过列名筛选['column3', 'column4']获取目标列,比删除列更稳健,同时严格保证输出列顺序为[column3, column4, ExcelFile]
  • 先检查目标工作表是否存在,跳过无目标工作表的文件,避免无效循环
  • 使用ignore_index=True重置合并后的索引,保证索引连续无重复

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:56:02