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

如何用Pandas/R读取含重复列的CSV并合并重复列?

处理含重复列名的CSV文件(Pandas/R)

Python 实现

1. 读取时保留原始重复列名

Pandas默认会给重复列添加.1、.2这类后缀,通过设置mangle_dupe_cols=False可以禁用该行为,保留原始重复列名:

import pandas as pd
# 保留重复列名读取CSV
df = pd.read_csv("dummy.csv", mangle_dupe_cols=False)

读取完成后,可按列名分组,根据数据类型选择合适的合并逻辑(比如数值列求和、非数值列取第一个非空值):

# 按列名分组合并重复列
df_merged = df.groupby(df.columns, axis=1).agg(
    lambda x: x.sum() if pd.api.types.is_numeric_dtype(x) else x.first_valid_index()
)

2. 读取时直接合并重复列

如果不需要保留重复列的中间状态,可以读取后立即完成合并:

import pandas as pd
# 读取并直接合并重复列
df = pd.read_csv("dummy.csv", mangle_dupe_cols=False)
# 数值列求和,可根据需求替换为mean()、max()等
df_merged = df.groupby(df.columns, axis=1).sum()

R 实现

1. 读取时保留原始重复列名

R的read.csv默认会修改重复列名,设置check.names=FALSE即可保留原始列名:

# 保留重复列名读取CSV
df <- read.csv("dummy.csv", check.names = FALSE)

后续按列名分组合并,以数值列求和为例:

# 按列名分组合并重复列
df_merged <- sapply(unique(names(df)), function(col) rowSums(df[, names(df) == col]))
df_merged <- as.data.frame(df_merged)

2. 读取时直接合并重复列

若需要一步完成读取与合并,可先获取原始列名,再处理:

# 获取原始列名
col_names <- names(read.csv("dummy.csv", nrows = 0, check.names = FALSE))
# 读取数据并合并重复列
df <- read.csv("dummy.csv", check.names = FALSE)
df_merged <- sapply(unique(col_names), function(col) rowSums(df[, col_names == col]))
df_merged <- as.data.frame(df_merged)

关于无法直接创建重复列名DataFrame的说明

Python字典和R的data.frame构造函数都不允许重复键/列名:

  • Python字典会自动覆盖重复的键(示例中三个"Event"键最终只保留最后一个);
  • R的data.frame会自动为重复列添加后缀。

要模拟CSV中的重复列结构,需手动生成CSV文件,示例如下:

# 生成带重复列名的CSV示例
with open("dummy.csv", "w") as f:
    f.write("Name,Dates,Event,Event,Event\n")
    names = ["Jim"]*10 + ["Sue"]*10
    dates = ["2010-1-1", "2010-1-2", "2010-01-5","2010-01-17","2010-01-20",
             "2010-01-29","2010-02-6","2010-02-9","2010-02-16","2010-02-28"]
    for name in names:
        for date in dates:
            f.write(f"{name},{date},1,1,1\n")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:09:23