Pandas中DataFrame.duplicated()返回异常结果求助
问题分析与解决方法
你没误解duplicated()的逻辑,它的默认行为是这样的:
duplicated()默认参数为keep='first',作用是标记当前行在整个列的前面部分已经出现过的重复项,而非判断当前行与相邻行、或你截取的切片内是否存在重复。你看到155071-155075行被标记为True,是因为这些行的内容在DataFrame的前155070行中已经出现过,并非在你截取的这段切片里重复。
正确排查重复并避免误删的方法:
- 要查看所有重复行(包括首次出现的原版和后续重复的副本),执行以下代码:
这样就能看到每一组重复的完整内容,定位出标记为x[x['comment'].duplicated(keep=False)]True的行到底和前面哪一行重复。 - 若担心存在肉眼不可见的差异(比如首尾空格、换行符、特殊编码字符),可先对列做清洗处理:
再重新运行x['comment'] = x['comment'].str.strip() # 去除字符串首尾空白字符duplicated()检查。 - 按需使用
drop_duplicates():- 保留每一组重复的首次出现行:用默认的
x.drop_duplicates(subset='comment') - 保留每一组重复的最后出现行:
x.drop_duplicates(subset='comment', keep='last') - 删除所有重复组(无论首次还是后续出现):
x.drop_duplicates(subset='comment', keep=False)
- 保留每一组重复的首次出现行:用默认的
内容的提问来源于stack exchange,提问作者ScodingB
相关产品推荐
相关产品推荐

