You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何修改列内文本值并合并首行内容与列名?

Pandas DataFrame 列名重构与值替换方案

初始测试数据

先运行如下代码复现初始DataFrame:

import pandas as pd

data={'a1':['X1',2,3,4,5],'Unnamed: 02':['Y1',5,6,7,8],'b1':['X2',5,3,7,9],'Unnamed: 05':['Y2',5,8,9,3],'c1':['X3',4,5,7,5],'Unnamed: 07':['Y3',5,8,9,3],'d1':['P',2,4,5,7],'Unnamed: 09':['M',8,4,6,7]}
df=pd.DataFrame(data)
# 向前填充列名,处理Unnamed空列名
df.columns=df.columns.to_series().mask(lambda x: x.str.startswith('Unnamed')).ffill()

处理规则

  • 文本值替换:全局将X1/X2/X3统一替换为X,Y1/Y2/Y3统一替换为Y
  • 列名重构:提取第一行的标识位,若标识为P/M则直接作为新列名;其余标识先做统一替换,再和原列名拼接为原列名_标识的格式,最后删除作为临时表头的第一行。

完整实现代码

# 定义值替换映射关系
replace_map = {'X1':'X', 'X2':'X', 'X3':'X', 'Y1':'Y', 'Y2':'Y', 'Y3':'Y'}
# 提取首行标识,提前做值替换用于生成新列名
header_tags = df.iloc[0].replace(replace_map)

# 遍历生成新列名
new_columns = []
for origin_col, tag in zip(df.columns, header_tags):
    if tag in ('P', 'M'):
        new_columns.append(tag)
    else:
        new_columns.append(f"{origin_col}_{tag}")

# 应用新列名、删除首行、全局执行值替换
df.columns = new_columns
df = df.iloc[1:].reset_index(drop=True)
df = df.replace(replace_map)

处理后效果

最终得到的DataFrame列名依次为a1_X、a1_Y、b1_X、b1_Y、c1_X、c1_Y、P、M,所有单元格内的X、Y类文本已完成统一替换,剩余行均为有效数值数据。

内容的提问来源于stack exchange,提问作者Win Yen Tham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:06:25