Python中用reduce合并DataFrame后,如何修改各数据框列名?
解决Pandas多DataFrame合并后列名重复的问题
合并后列名重复是因为多个date_gameX里除了just_date之外的列名一致,Pandas会自动给重复列添加_x、_y这类后缀。最稳妥的解决方式是在合并前给每个DataFrame的非关联列加上唯一标识,具体实现如下:
方法一:批量提前重命名(推荐)
先把所有DataFrame放入列表,循环给每个DataFrame的非just_date列添加对应索引的后缀,确保列名唯一:
from functools import reduce import pandas as pd # 将所有待合并的DataFrame存入列表 df_list = [date_game0, date_game1, date_game2, date_game3, date_game4, date_game5, date_game6, date_game7, date_game8, date_game9, date_game10] # 循环重命名每个DataFrame的列 for idx, df in enumerate(df_list): # 仅修改除just_date外的列名,添加索引后缀 new_columns = [] for col in df.columns: if col == 'just_date': new_columns.append(col) else: new_columns.append(f"{col}_{idx}") df.columns = new_columns # 执行合并 dfs = reduce(lambda x,y: pd.merge(x,y, on='just_date', how='outer'), df_list)
方法二:合并时动态指定后缀
如果不想提前修改原DataFrame,可以在每次合并过程中给新加入的DataFrame列名添加唯一后缀:
from functools import reduce import pandas as pd def merge_with_unique_suffix(x, y): # 提取已存在的后缀数字,确定下一个后缀序号 existing_suffixes = [] for col in x.columns: if col != 'just_date' and '_' in col: try: suffix = int(col.split('_')[-1]) existing_suffixes.append(suffix) except ValueError: pass next_idx = max(existing_suffixes) + 1 if existing_suffixes else 0 # 重命名当前待合并的DataFrame的列 y_renamed = y.rename(columns={col: f"{col}_{next_idx}" for col in y.columns if col != 'just_date'}) return pd.merge(x, y_renamed, on='just_date', how='outer') # 初始化第一个DataFrame,给它的非关联列加后缀0 initial_df = date_game0.rename(columns={col: f"{col}_0" for col in date_game0.columns if col != 'just_date'}) # 合并剩余DataFrame dfs = reduce(merge_with_unique_suffix, [date_game1, date_game2, date_game3, date_game4, date_game5, date_game6, date_game7, date_game8, date_game9, date_game10], initial_df)
两种方法都能避免列名重复,方法一逻辑更直观,适合DataFrame数量较多的场景,便于后续维护。
内容的提问来源于stack exchange,提问作者MakM
相关产品推荐
相关产品推荐

