使用pandas drop_duplicates指定列去重未完全生效问题求助
Pandas drop_duplicates未彻底清除重复项的排查与解决
给你几个实际场景里容易踩的坑和解决办法:
隐性字符差异:目标列的字符串可能带前后空格、大小写不一致,肉眼看着相同但程序会判定为不同值。先统一处理文本列:
# 去除空格+统一大小写(针对文本类列) df['Anonymized_ID'] = df['Anonymized_ID'].astype(str).str.strip() df['COURSE'] = df['COURSE'].astype(str).str.strip().str.lower() df['GRADE'] = df['GRADE'].astype(str).str.strip()处理完成后再执行drop_duplicates。
数据类型不统一:比如GRADE列里同时存在整数和字符串(如85和"85"),这类值会被判定为不同。先检查列的类型:
print(df[['Anonymized_ID', 'COURSE', 'GRADE']].dtypes)发现类型不一致时,统一转换为相同类型(比如全转成字符串或数值型)。
浮点数精度问题:如果GRADE是浮点数,可能存在看似相同但精度有细微差异的情况(如85.0和85.0000001)。可以对浮点数列做四舍五入处理:
df['GRADE'] = df['GRADE'].round(2)列名拼写错误:确认subset参数里的列名和DataFrame实际列名完全一致(包括大小写、下划线),比如把
Anonymized_ID写成Anonymized_Id的话,subset参数相当于未生效,去重会按整行判断,自然达不到预期效果。
另外,建议先验证哪些行被判定为重复,用以下代码可以显示所有重复行,方便定位问题:
# 显示所有被标记为重复的行 print(df[df.duplicated(subset=['Anonymized_ID', 'COURSE', 'GRADE'], keep=False)])
内容的提问来源于stack exchange,提问作者yessspink
相关产品推荐
相关产品推荐

