如何用Pandas处理双表头CSV:将第二行表头按每行转置?
解决方案
假设你的CSV文件结构如下(示例):
ID,Value,Category
Identifier,Amount,Type
1,100,A
2,200,B
3,300,C
需求是将第一行作为最终表头,同时把第二行的表头内容作为额外列添加到每一行数据中,最终输出类似:
ID,Value,Category,ID_Label,Value_Label,Category_Label
1,100,A,Identifier,Amount,Type
2,200,B,Identifier,Amount,Type
3,300,C,Identifier,Amount,Type
你之前尝试的transpose、pivot、pivot_table都不符合这个场景——这些函数用于整体转置或重塑宽/长表,而我们需要的是提取单独一行并将其作为固定列追加到所有数据行。以下是可行的代码实现:
import pandas as pd # 读取CSV所有内容,不设置表头 all_content = pd.read_csv("your_file.csv", header=None) # 提取第一行作为最终表头 final_headers = all_content.iloc[0].tolist() # 提取第二行作为要追加到每一行的标签内容 label_content = all_content.iloc[1].tolist() # 提取第三行及以后的实际数据 data_df = all_content.iloc[2:] # 给数据设置最终表头 data_df.columns = final_headers # 生成标签列的名称(可自定义命名规则) label_columns = [f"{col}_Label" for col in final_headers] # 将标签内容赋值给所有行的新列 data_df[label_columns] = label_content # 重置索引(可选,清理索引) data_df = data_df.reset_index(drop=True) # 查看结果或保存到新CSV print(data_df) # data_df.to_csv("output.csv", index=False)
关键步骤说明
- 先读取所有内容而不指定表头,这样能完整获取前两行的表头信息和后续数据
- 通过
iloc精准提取需要的行:第一行做表头,第二行做固定标签,第三行及以后是数据 - 直接将标签行赋值给新列,pandas会自动将这一行内容广播到所有数据行
内容的提问来源于stack exchange,提问作者rupi
相关产品推荐
相关产品推荐

