如何提取并更新Pandas DataFrame列名?保留非目标列原名
解决Pandas列名匹配重命名问题
当读取数据到Pandas DataFrame时,目标列名前后常混杂随机字符串,同时存在无关列且列顺序不固定。需要将匹配目标列名的列重命名为标准名称,无关列保留原列名。
示例数据
import pandas as pd import numpy as np df = pd.DataFrame( np.random.randn(4, 5), columns=['betarandstr1.823491', 'alpha randstr123', 'other', 'delta', 'randstr-1.281999 gamma'] ) keys = ['alpha', 'beta', 'gamma', 'delta'] # 期望的标准列名
已完成的提取步骤
通过正则提取可获取每列对应的标准名称:
extracted_names = df.columns.str.extract('(%s)' % '|'.join(keys)) print(extracted_names)
输出结果:
0 0 beta 1 alpha 2 NaN 3 delta 4 gamma
最终解决方案
利用fillna将提取结果中的NaN替换为原列名,再赋值给DataFrame的列名即可:
# 提取列名并替换NaN为原列名 new_columns = extracted_names[0].fillna(df.columns) # 更新DataFrame的列名 df.columns = new_columns
验证最终列名:
print(df.columns)
输出结果:
Index(['beta', 'alpha', 'other', 'delta', 'gamma'], dtype='object')
补充说明
- 正则表达式中的括号用于精确捕获匹配到的目标列名,避免提取到多余字符
fillna(df.columns)会针对每个位置的NaN,替换为对应位置的原始列名,确保无关列保留原名
内容的提问来源于stack exchange,提问作者alec
相关产品推荐
相关产品推荐

