如何使用pandas重命名名称、顺序均动态变化的文件列名
Pandas实现方案
核心思路是先对列名做统一归一化处理,再和预设的标准列名映射规则匹配,最后按固定标准顺序重排列即可,不受原始列名写法、列序的影响。
代码实现
import pandas as pd # 1. 提前配置规则:可根据自己的业务场景增删调整 # 列名映射:key为归一化后的匹配关键词,value为最终输出的标准列名 col_match_map = { "postcode": "PostCode", "brand": "brand" } # 最终输出的标准列顺序 standard_order = ["PostCode", "brand"] def norm_col(col_name): """列名归一化函数,可根据业务调整规则""" # 统一转小写、去除首尾空白 clean_col = col_name.strip().lower() # 处理单复数变体,比如brands→brand if clean_col.endswith("s") and clean_col[:-1] in col_match_map: clean_col = clean_col[:-1] # 其他变体规则可在此扩展,比如去除下划线、中划线:clean_col = clean_col.replace("_", "").replace("-", "") return clean_col # 2. 批量处理文件逻辑 # 替换成你自己的待处理文件路径列表 file_list = ["./file1.csv", "./file2.csv", "./file3.csv"] for path in file_list: # 读取文件 df = pd.read_csv(path) # 按规则重命名列 df = df.rename(columns=lambda x: col_match_map[norm_col(x)]) # 按标准顺序重排列,不需要的额外列会自动过滤,要保留多余列可加参数errors="ignore" df = df[standard_order] # 保存处理后的文件,也可直接覆盖原文件 df.to_csv(path.replace(".csv", "_standard.csv"), index=False)
效果验证
对应你给出的三个示例,处理后都会自动对齐为标准格式:
- 示例1的
postcode归一化后匹配到PostCode,brand直接匹配,列序自动调整为标准顺序 - 示例2的
PostCode转小写后匹配,brands去掉末尾s后匹配到brand - 示例3调换列序的情况下,重命名后会按
standard_order重新排序,自动对齐标准格式
如果后续出现新的列名写法,只需要在col_match_map里增加对应的匹配规则、或者调整norm_col里的归一化逻辑即可,不需要改主体处理逻辑。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

