如何通过循环按列位置自动重命名DataFrame的同名列
Pandas 按位置顺序批量重命名同名列实现方案
以下方法无需手动枚举全量列名,可自动适配任意数量同名列的重命名场景。
- 通用全列去重方案
自动识别所有重名列,按出现顺序追加数字后缀:
from collections import defaultdict import pandas as pd def auto_rename_duplicate_cols(df: pd.DataFrame) -> pd.DataFrame: name_counter = defaultdict(int) new_columns = [] for col_name in df.columns: name_counter[col_name] += 1 # 若需要所有同名目标列都加序号(如第一个L也改为L1),删除下方if判断即可 if name_counter[col_name] == 1: new_columns.append(col_name) else: new_columns.append(f"{col_name}{name_counter[col_name]}") df.columns = new_columns return df
- 指定列重命名方案
仅处理指定名称的重复列,其余列名保持不变,适配当前重命名L列的需求:
import pandas as pd def rename_target_duplicate_cols(df: pd.DataFrame, target_col: str) -> pd.DataFrame: new_columns = [] seq = 0 for col_name in df.columns: if col_name == target_col: seq += 1 new_columns.append(f"{target_col}{seq}") else: new_columns.append(col_name) df.columns = new_columns return df # 调用示例:自动将所有L列按从左到右顺序重命名为L1、L2、L3... df = rename_target_duplicate_cols(df, target_col="L")
注意:不要使用
df.rename()处理同名列,该方法按列名做键值匹配,会将所有同名列统一修改为同一个名称,无法实现按位置区分的重命名效果。
内容的提问来源于stack exchange,提问作者Milo
相关产品推荐
相关产品推荐

