本节前言
重复值会导致统计结果偏差。pandas 提供
duplicated()检测与drop_duplicates()删除的完整方案。
1. 检测重复值:duplicated()
返回布尔 Series,标记重复行(除首次出现外)。
参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
subset | list | None | 指定列的子集判断重复 |
keep | str / bool | ’first' | 'first’:标记后续重复;‘last’:标记之前重复;False:全部标记 |
示例
df = pd.DataFrame({
'A': [1, 1, 2, 2, 3],
'B': ['x', 'x', 'y', 'z', 'z']
})
df.duplicated()
# 0 False
# 1 True # A=1, B=x 与行 0 重复
# 2 False
# 3 False
# 4 False
# 只看 A 列
df.duplicated(subset=['A'])
# 0 False
# 1 True
# 2 False
# 3 True
# 4 False
# 标记所有重复(包括首次)
df.duplicated(keep=False)
# 0 False
# 1 False
# 2 True
# 3 True
# 4 False # A=3 只出现一次,不标记2. 删除重复值:drop_duplicates()
删除重复行,返回去重后的 DataFrame。
参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
subset | list | None | 指定列判断重复 |
keep | str / bool | ’first’ | 保留哪个重复项 |
inplace | bool | False | 是否原地修改 |
ignore_index | bool | False | 是否重置索引为 0..n-1 |
示例
df.drop_duplicates()
# A B
# 0 1 x
# 2 2 y
# 3 2 z
# 4 3 z
df.drop_duplicates(subset=['A'])
df.drop_duplicates(keep='last')
df.drop_duplicates(keep=False) # 删除所有出现超过一次的行
df.drop_duplicates(ignore_index=True) # 重置索引实用技巧
- 先
duplicated()定位,再drop_duplicates()清理。- 使用
subset防止因无关列差异而误判。keep=False可用于剔除任何非唯一的行。- 若需统计重复数量:
df.duplicated().sum()。