为何使用try-except重命名Pandas列时无法正常生效?
Pandas重命名列时try-except不生效的问题解决
问题原因
Pandas的rename()方法有个特性:当你传入的列名不存在时,它不会抛出任何异常,只会静默跳过该重命名操作。这就是为什么你的代码从未进入except分支,列名也没被修改的核心原因。
正确处理方式
方法1:直接检查列是否存在(推荐)
不需要依赖try-except,直接判断目标列是否在DataFrame中,再执行对应重命名逻辑:
# 优先尝试重命名Deep_Res_ohmm if 'Deep_Res_ohmm' in df_data.columns: df_data = df_data.rename(columns={'Deep_Res_ohmm': 'new_name'}) # 不存在则尝试重命名Shallow_Res_ohmm elif 'Shallow_Res_ohmm' in df_data.columns: df_data = df_data.rename(columns={'Shallow_Res_ohmm': 'new_name'}) # 都不存在则给出提示 else: print("需要重命名的目标列不存在")
方法2:自定义安全重命名函数(适配try-except)
如果一定要用try-except逻辑,可以自己封装一个重命名函数,确保列不存在时主动抛出异常:
def safe_rename(df, column_mapping): # 找出所有不存在的目标列 missing_columns = [col for col in column_mapping.keys() if col not in df.columns] if missing_columns: raise KeyError(f"列 {missing_columns} 不存在于DataFrame中") return df.rename(columns=column_mapping) try: df_data = safe_rename(df_data, {'Deep_Res_ohmm': 'new_name'}) except KeyError: print('testing different column name') df_data = safe_rename(df_data, {'Shallow_Res_ohmm': 'new_name'})
效果验证
用你的测试数据执行上述代码后,输出结果会变为:
df_after WellMD new_name 0 1031.7 8.14 1 1031.8 10.04 2 1031.9 10.11
内容的提问来源于stack exchange,提问作者roudan
相关产品推荐
相关产品推荐

