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

Pandas读取CSV文件时列名分散在多行如何合并避免重复列名

解决方案

方法1:利用多级表头自动拼接(无需手动修改列名,最简便)

如果分散的列名是连续的N行,直接在读取时指定多行作为表头,再拼接为单级列名即可:

  • 首先确认列名分布的所有行号(pandas行号从0开始计数,你之前使用的header=54代表第55行是表头,如果还有相邻行也是列名的组成部分,把对应行号都加入参数列表即可)
    示例代码(假设列名分散在第54、55两行):
import pandas as pd

# 读取时指定多行生成多级表头
df = pd.read_csv("CO2.csv", header=[54, 55])

# 拼接多级列名,可根据需要把下划线替换为空格等其他分隔符
df.columns = ['_'.join(col).strip() for col in df.columns.values]
  • 如果部分行的列名片段为空,可以加一层过滤避免生成多余的空字符:
df.columns = ['_'.join([part for part in col if part.strip()]).strip() for col in df.columns.values]

该方法会自动合并多行的列名片段生成完整列名,解决缺字导致的假重复问题。

方法2:表头行不连续时的处理

如果列名片段分布在不连续的行,可以先单独读取所有表头行拼接后,再读取数据部分:

# 分别读取分散的表头行,示例中列名片段在第50行、第54行
header_part1 = pd.read_csv("CO2.csv", nrows=1, skiprows=50, header=None).iloc[0].tolist()
header_part2 = pd.read_csv("CO2.csv", nrows=1, skiprows=54, header=None).iloc[0].tolist()

# 拼接生成完整列名
full_header = [f"{a}_{b}".strip() for a, b in zip(header_part1, header_part2)]

# 读取数据段,传入提前拼接好的列名
df = pd.read_csv("CO2.csv", skiprows=55, header=None, names=full_header)

内容的提问来源于stack exchange,提问作者stackword_0

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:15:03