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
相关产品推荐
相关产品推荐

