如何给字典中存储的多个DataFrame添加Key列并按列数分组拼接
问题解答
一、新增键名列且不生成额外DataFrame的实现
你原代码出现额外DataFrame的核心原因是直接用df['sheet_name'] = key在部分场景下会触发pandas的副本机制,生成新的DataFrame对象而非原地修改。要实现完全原地修改,用loc索引赋值即可:
for key, df in sheet_to_df_map.items(): df.loc[:, 'sheet_name'] = key
这种写法直接操作原DataFrame的内存空间,不会生成多余的临时DataFrame对象。
二、按列数分类拼接DataFrame的实现
你可以先以列数为键构建分类字典,再对每类的DataFrame列表做合并操作,示例代码如下:
import pandas as pd from collections import defaultdict # 第一步:按列数分组 col_count_group = defaultdict(list) for df in sheet_to_df_map.values(): col_count = len(df.columns) col_count_group[col_count].append(df) # 第二步:对每组列数相同的DataFrame做拼接 concat_result = {} for col_num, df_list in col_count_group.items(): # ignore_index=True表示拼接后重置行索引,不需要可删除该参数 concat_result[col_num] = pd.concat(df_list, ignore_index=True)
执行完成后,concat_result字典的键为列数,值为对应列数所有DataFrame拼接后的结果。
内容的提问来源于stack exchange,提问作者Steven González
相关产品推荐
相关产品推荐

