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

使用pd.read_csv导入含重复列名的CSV文件问题

解决Pandas导入重复列名CSV的问题

核心思路

Pandas默认会合并重复列名,且usecols中的重复列名只会匹配第一个出现的列,直接用原方法无法保留所有重复列。解决步骤是先读取原始列名并处理重复项,再用处理后的唯一列名重新读取文件。

完整代码示例

import pandas as pd
from collections import defaultdict

# 1. 读取原始表头(仅读第一行)
original_columns = pd.read_csv('new.csv', nrows=0).columns.tolist()

# 2. 处理重复列名,生成唯一列名
col_counts = defaultdict(int)
unique_columns = []
for col in original_columns:
    col_counts[col] += 1
    if col_counts[col] > 1:
        # 给重复列添加后缀,如Row B_1、Row B_2
        unique_columns.append(f"{col}_{col_counts[col]-1}")
    else:
        unique_columns.append(col)

# 3. 用处理后的列名读取完整数据
df = pd.read_csv('new.csv', header=0, names=unique_columns, sep=',')

按需筛选列的扩展方案

如果不需要导入所有列,而是指定保留Row A、所有Row B和Row C,可以在读取时筛选对应列的索引:

# 定义需要保留的原始列名
target_cols = ["Row A", "Row B", "Row C"]
# 获取目标列的索引(包括所有重复的Row B)
target_indices = [i for i, col in enumerate(original_columns) if col in target_cols]
# 筛选出对应的唯一列名
filtered_unique_cols = [unique_columns[i] for i in target_indices]

# 读取指定列
df = pd.read_csv('new.csv', header=0, usecols=target_indices, names=filtered_unique_cols, sep=',')

为什么原代码无效?

你之前使用的usecols=["Row A", "Row B", "Row B", "Row C"]中,重复的Row B会被Pandas视为同一个列,只会匹配文件中第一个出现的Row B列,因此无法读取后续的重复列。通过先处理列名再读取的方式,能确保每一列都被正确识别和命名。

内容的提问来源于stack exchange,提问作者Oliver T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:35:16