从嵌套字典的Pandas数据框提取指定列至主数据框求助
问题解决:合并嵌套字典中指定Excel工作表的指定列
原代码问题分析
- 数据覆盖问题:每次匹配到目标工作表时,直接用
df = pd.DataFrame(value1)覆盖已有数据,最终仅保留最后一个符合条件的文件数据,无法实现多文件合并 - 列处理不稳健:通过删除列的方式保留目标列,若部分文件缺失
colum_1/column2会触发报错,且存在列名拼写错误(colum_1少了一个n) - 初始化冗余:初始创建带
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
相关产品推荐
相关产品推荐

