使用Pandas基于userID列对JSON数据去重仍有重复如何解决?
解决方案
你遇到的去重失效问题核心原因大概率是userID列存在逻辑值相同但实际判定值不同的情况,比如数据类型不一致、存在前后空格/不可见特殊字符等。drop_duplicates是严格等值判定,只要两个值的类型、字符内容有细微差异,就会被判定为不同值,和其他字段有没有出现userID完全无关。
修复后的完整代码如下:
import pandas as pd # 读取原始数据 data3 = pd.read_json("./sept-count/all_data.json") # 第一步:清洗userID列,统一格式避免判定偏差 # 1. 统一转为字符串类型 2. 去除首尾空白/不可见字符 3. 空值统一处理 data3['userID'] = data3['userID'].astype(str).str.strip().replace('', pd.NA) # 第二步:按userID去重,仅保留首次出现的记录 # 不需要提前排序,排序会打乱原始顺序,keep='first'默认按原始顺序保留第一条 data_unique = data3.drop_duplicates(subset=['userID'], keep='first').reset_index(drop=True) # 验证去重结果:两个输出值相等即代表去重成功 print(f"去重后总行数:{len(data_unique)}") print(f"userID唯一值数量:{data_unique['userID'].nunique()}") # 保存结果 data_unique.to_json("./sept-count/unique_data.json", orient='records', force_ascii=False)
如果验证后仍存在重复,可以用以下代码定位异常值:
# 找出仍然重复的userID dup_ids = data_unique[data_unique.duplicated(subset=['userID'], keep=False)]['userID'].unique() print("存在重复的userID:", dup_ids) # 输出对应userID的原始记录排查差异 print(data3[data3['userID'] == dup_ids[0]])
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

