pandas读取CSV重复列自动加.1导致drop_duplicates失效如何解决
问题原因
- pandas的DataFrame结构要求列名唯一,
pd.read_csv()默认检测到重复表头时,会自动为第2个及之后的重复列追加.1、.2格式的后缀,避免列名冲突,这是pandas的默认处理逻辑。 drop_duplicates()方法的作用是按行删除数值完全相同的重复行,而非处理重复列,被自动重命名后的列会被识别为独立列,自然无法通过该方法实现重复列的去重或合并。
解决方案
首先读取文件时保留原始重复列名,避免pandas自动加后缀:
import pandas as pd file = 'survey.csv' # 先读取原始表头(你指定header=1即CSV的第二行作为表头) raw_header = pd.read_csv(file, nrows=1, skiprows=0).columns.tolist() # 读取实际数据,跳过前两行(第一行是表头之前的内容,第二行是表头行) responses = pd.read_csv(file, skiprows=2, header=None) # 给数据集设置原始的重复列名 responses.columns = raw_header
之后根据你的实际需求选择处理逻辑:
场景1:删除数值完全相同的重复列
如果同名列的所有行数值完全一致,仅需保留一份,执行以下代码:
# 转置后按行去重,再转置回原结构即可删除重复列 responses = responses.T.drop_duplicates().T
场景2:合并同名列的数据
如果同一个列名对应多份收集结果,需要合并为同一列,可按列名分组后自定义合并逻辑,示例如下:
# 按列名分组,取每行第一个非空值作为合并结果 responses = responses.groupby(level=0, axis=1).first() # 若为数值类问题需要取平均值,可替换为以下逻辑 # responses = responses.groupby(level=0, axis=1).mean()
注意:旧版本pandas提供的
mangle_dupe_cols参数已在2.0+版本完全移除,不建议使用该参数控制重复列名处理逻辑。
内容的提问来源于stack exchange,提问作者labyrinth
相关产品推荐
相关产品推荐

