Python/Pandas批量重命名Unnamed开头列为1960-2019年份
pandas批量重命名Unnamed开头列为1960-2019年份实现方案
核心逻辑是遍历列名,保留非Unnamed开头的原有列名,对匹配到的Unnamed列按顺序替换为对应年份即可,具体实现如下:
- 前置校验:先确认待替换列的数量和年份序列长度匹配,避免列名错位
- 列名替换:遍历所有列名,按规则生成新列名列表后整体赋值给DataFrame的columns属性
- 结果校验:替换完成后打印前几行数据确认列名符合预期
代码实现
import pandas as pd # df为你读取完成的待处理DataFrame # 第一步:生成1960到2019的年份序列,range左闭右开,结束值传2020 year_sequence = list(range(1960, 2020)) # 第二步:校验待替换列数量 unnamed_count = sum(1 for col in df.columns if str(col).startswith("Unnamed:")) if unnamed_count != len(year_sequence): raise ValueError(f"待替换Unnamed列数量为{unnamed_count},和年份序列长度{len(year_sequence)}不匹配,请调整年份范围") # 第三步:构造新列名 new_columns = [] year_pointer = 0 for col in df.columns: if str(col).startswith("Unnamed:"): new_columns.append(year_sequence[year_pointer]) year_pointer += 1 else: new_columns.append(col) # 第四步:替换列名 df.columns = new_columns
极简写法(不需要前置校验时使用)
如果已经确认列数量完全匹配,可以用更短的代码实现:
year_iter = iter(range(1960, 2020)) df.columns = [next(year_iter) if str(col).startswith("Unnamed:") else col for col in df.columns]
提示:如果读取文件时就不希望生成Unnamed开头的列,可以在
pd.read_excel()/pd.read_csv()时根据实际表结构传入header参数指定表头行,从源头避免无表头列被自动命名为Unnamed的问题。
相关数据示例:
内容的提问来源于stack exchange,提问作者Oskar
相关产品推荐
相关产品推荐

