pandas DataFrame选择指定列自动重命名并保留其余列问题
问题原因
你触发警告的核心原因是gini.iloc[:, 2:]返回的是原DataFrame的视图,直接在视图上执行inplace=True的修改操作时,pandas无法确认你是否需要修改原数据,因此抛出SettingWithCopyWarning提示风险。
解决方案
方案1:直接修改全表列名(最简洁,无警告)
直接构造新的列名列表,前两列保留原名称,后续列按规则截取,直接赋值给gini.columns即可:
# 前2列保持不变,第3列及之后的列名取前4位 gini.columns = gini.columns[:2].tolist() + [col[:4] for col in gini.columns[2:]]
方案2:对全表使用rename方法
如果需要使用rename实现,可以直接对整个DataFrame操作,仅指定需要修改的列映射关系,不会触发警告:
# 构造需要修改的列名字典,仅针对第3列及之后的列 col_mapping = {col: col[:4] for col in gini.columns[2:]} # 方式1:使用inplace参数 gini.rename(columns=col_mapping, inplace=True) # 方式2:官方更推荐的赋值写法,无需使用inplace # gini = gini.rename(columns=col_mapping)
两种方案都可以保留前两列的列名完全不变,同时完成后续年份列的重命名,不会出现拷贝警告。
内容的提问来源于stack exchange,提问作者Gladou
相关产品推荐
相关产品推荐

