Skip to content

重复值处理

重复值会影响数据分析的准确性,Pandas 提供了检测和处理重复值的方法。

检测重复值

python
import pandas as pd

df = pd.DataFrame({
    '姓名': ['张三', '李四', '张三', '王五', '李四'],
    '年龄': [25, 30, 25, 35, 30],
    '城市': ['北京', '上海', '北京', '广州', '上海']
})

# 检测重复行(保留第一个)
print(df.duplicated())

# 检测重复行(保留最后一个)
print(df.duplicated(keep='last'))

# 标记所有重复行
print(df.duplicated(keep=False))

# 基于特定列检测重复
print(df.duplicated(subset=['姓名']))

# 统计重复行数量
print(df.duplicated().sum())

查看重复值

python
# 查看重复的行
duplicates = df[df.duplicated(keep=False)]
print(duplicates)

# 按列排序查看重复
duplicates = df[df.duplicated(keep=False)].sort_values('姓名')
print(duplicates)

删除重复值

python
# 删除重复行(保留第一个)
df_unique = df.drop_duplicates()
print(df_unique)

# 删除重复行(保留最后一个)
df_unique = df.drop_duplicates(keep='last')
print(df_unique)

# 删除所有重复行
df_unique = df.drop_duplicates(keep=False)
print(df_unique)

# 基于特定列删除重复
df_unique = df.drop_duplicates(subset=['姓名'])
print(df_unique)

# 基于多列删除重复
df_unique = df.drop_duplicates(subset=['姓名', '年龄'])
print(df_unique)

# 原地删除
df.drop_duplicates(inplace=True)
print(df)

处理重复值的策略

策略一:保留第一个

python
# 默认行为,保留第一次出现的记录
df_clean = df.drop_duplicates(keep='first')

策略二:保留最后一个

python
# 保留最后一次出现的记录
df_clean = df.drop_duplicates(keep='last')

策略三:合并重复记录

python
# 对重复记录进行聚合
df_grouped = df.groupby('姓名').agg({
    '年龄': 'first',
    '城市': 'first'
}).reset_index()
print(df_grouped)

策略四:标记重复记录

python
# 添加重复标记列
df['是否重复'] = df.duplicated(keep=False)
print(df)

实际应用示例

python
# 销售数据去重
df_sales = pd.DataFrame({
    '订单号': ['A001', 'A002', 'A001', 'A003', 'A002'],
    '产品': ['手机', '电脑', '手机', '平板', '电脑'],
    '金额': [3000, 5000, 3000, 2500, 5000]
})

# 检查是否有重复订单
print(f"重复订单数: {df_sales.duplicated().sum()}")

# 删除重复订单
df_clean = df_sales.drop_duplicates()
print(df_clean)

# 检查特定列的重复
print(df_sales.drop_duplicates(subset=['订单号']))

正确处理重复值可以保证数据质量,是数据清洗的重要步骤。