重复值检测与处理是数据清洗的一个重要步骤。通过检测并处理数据中的重复值,可以保证数据的完整性和准确性,避免冗余数据影响分析结果。本章学习目标把处理缺失值、异常值、重复值列为清洗技能。课程示例为 data = {'A': [1, 2, 2, 3], 'B': [4, 5, 5, 6]},再 df = DataFrame(data),得到 4 行数据框:第 0 行 A=1、B=4,第 1 行 A=2、B=5,第 2 行 A=2、B=5,第 3 行 A=3、B=6。第 1 行与第 2 行各列取值完全相同,第 2 行是重复行。导入可用 from pandas import DataFrame。
检测使用 duplicated()。该函数会返回一个布尔类型的序列对象,指示每一行是否为重复行。通常情况下,保留第一次出现的值,后续重复的值会标记为 True。对本例执行 df.duplicated(),索引 0、1、3 为 False,索引 2 为 True(这一行被标记为重复行)。也就是说,第一次出现的 (2, 5) 不算重复,只有后面再次出现的那一行才为 True。该布尔序列可与布尔索引结合,用来查看哪些行被判定为重复。
删除使用 drop_duplicates()。可选择保留第一行或最后一行。df.drop_duplicates(keep='first') 保留第一次出现的那一行,结果行标签为 0、1、3,对应数据 1/4、2/5、3/6,去掉了序号 2。df.drop_duplicates(keep='last') 保留最后一次出现,结果行标签为 0、2、3,中间那行仍是 2/5,但序号是 2 而不是 1。语料注释强调:重复行数据相同,序号不同。
易错点:duplicated() 默认不把整组重复都标成 True,只把“后续”重复行标 True,本例仅第 2 行为 True;keep='first' 与 keep='last' 留下的 A、B 取值相同,但行标签不同,后续若按索引定位会取到不同行号;drop_duplicates() 与 dropna() 类似,返回新数据框、默认不修改原对象,必须接收返回值。教案将“正确识别并有效处理重复值”列为教学难点,清洗时应先 duplicated() 查看,再按分析需要选择保留第一行或最后一行。
关键要点
duplicated() 检测重复行,返回布尔类型的序列;通常保留第一次出现,后续重复标为 True。drop_duplicates() 删除重复值,keep='first' 保留第一行,keep='last' 保留最后一行。keep 留下的列值相同,行标签(序号)不同。drop_duplicates() 返回新数据框,默认不改原对象。