数据去重详解

在数据处理过程中,经常会遇到重复数据的问题。如果不进行去重,可能会导致分析结果偏差、计算资源浪费等问题。本文将详细介绍 Python 中常用的数据去重方法 ,涵盖 列表、NumPy数组、Pandas DataFrame 等多种数据结构,并提供代码示例,帮助初学者快速掌握数据去重的技巧。


1. 什么是数据去重?

数据去重(Deduplication)是指 从数据集中删除重复的记录,只保留唯一的数据项。常见的应用场景包括:

  • 清洗爬虫抓取的重复数据
  • 去除数据库中的冗余记录
  • 统计唯一用户数(UV)
  • 数据聚合分析前的预处理

2. Python 数据去重方法

2.1 列表(List)去重

列表是 Python 中最基础的数据结构,去重方法主要有以下几种:

方法 1:使用 set()(集合自动去重)
python 复制代码
data = [1, 2, 2, 3, 4, 4, 5]
unique_data = list(set(data))
print(unique_data)  # 输出:[1, 2, 3, 4, 5](顺序可能变化)

特点

  • 最简单,但 不保持原顺序(集合是无序的)。
  • 适用于不关心顺序的场景。
方法 2:使用 dict.fromkeys()(保持顺序)
python 复制代码
data = [1, 2, 2, 3, 4, 4, 5]
unique_data = list(dict.fromkeys(data))
print(unique_data)  # 输出:[1, 2, 3, 4, 5](保持原顺序)

特点

  • 利用字典键的唯一性,保持原顺序
  • Python 3.7+ 版本字典默认有序。
方法 3:遍历判断(适用于复杂数据)
python 复制代码
data = [1, 2, 2, 3, 4, 4, 5]
unique_data = []
for item in data:
    if item not in unique_data:
        unique_data.append(item)
print(unique_data)  # 输出:[1, 2, 3, 4, 5](保持顺序)

特点

  • 适用于 自定义去重逻辑(如基于对象属性去重)。
  • 但时间复杂度较高(O(n²)),大数据量时较慢。

2.2 NumPy 数组去重

NumPy 提供了 np.unique() 方法,适用于数值型数据去重。

方法 4:np.unique()
python 复制代码
import numpy as np

arr = np.array([1, 2, 2, 3, 4, 4, 5])
unique_arr = np.unique(arr)
print(unique_arr)  # 输出:[1 2 3 4 5]

进阶用法

  • return_index=True:返回唯一值在原数组的首次出现位置。
  • return_counts=True:返回每个唯一值的出现次数。
python 复制代码
unique_values, indices, counts = np.unique(arr, return_index=True, return_counts=True)
print(unique_values)  # 唯一值:[1 2 3 4 5]
print(indices)        # 首次出现位置:[0 1 3 4 6]
print(counts)         # 出现次数:[1 2 1 2 1]

2.3 Pandas DataFrame 去重

Pandas 是数据分析的利器,提供了 drop_duplicates() 方法,适用于表格数据去重。

方法 5:df.drop_duplicates()
python 复制代码
import pandas as pd

data = {
    "Name": ["Alice", "Bob", "Alice", "Charlie", "Bob"],
    "Age": [25, 30, 25, 35, 30]
}
df = pd.DataFrame(data)

# 默认去重(所有列完全相同才去重)
df_unique = df.drop_duplicates()
print(df_unique)

输出

复制代码
      Name  Age
0    Alice   25
1      Bob   30
3  Charlie   35

进阶用法

  • subset=["列名"]:指定某些列去重。
  • keep="first" | "last" | False:保留第一个/最后一个/全部删除重复项。
  • ignore_index=True:重置索引。
python 复制代码
# 只对 "Name" 列去重,保留第一个出现的记录
df_unique_name = df.drop_duplicates(subset=["Name"], keep="first")
print(df_unique_name)

输出

复制代码
      Name  Age
0    Alice   25
1      Bob   30
3  Charlie   35

2.4 大数据去重优化

如果数据量非常大(如百万级),可以使用更高效的方法:

方法 6:生成器 + 集合(节省内存)
python 复制代码
def dedupe_large_data(data_iter):
    seen = set()
    for item in data_iter:
        if item not in seen:
            yield item
            seen.add(item)

# 示例:逐行读取大文件去重
with open("large_data.txt", "r") as f:
    unique_lines = list(dedupe_large_data(f))
方法 7:使用数据库(如 SQL DISTINCT
sql 复制代码
-- 示例:SQL 去重
SELECT DISTINCT column1, column2 FROM table_name;

3. 如何选择去重方法?

场景 推荐方法
简单列表去重(不关心顺序) list(set(data))
列表去重(保持顺序) list(dict.fromkeys(data))
NumPy 数组去重 np.unique()
Pandas DataFrame 去重 df.drop_duplicates()
大数据去重(内存优化) 生成器 + 集合
数据库去重 SQL DISTINCT

4. 总结

  • 列表去重set() 最快但不保序,dict.fromkeys() 保序。
  • NumPy 去重np.unique() 适合数值计算。
  • Pandas 去重drop_duplicates() 适合表格数据。
  • 大数据去重:生成器 + 集合或数据库优化。

欢迎在评论区交流你的去重技巧! 😊

相关推荐
少林码僧4 小时前
2.29 XGBoost、LightGBM、CatBoost对比:三大梯度提升框架选型指南
人工智能·机器学习·ai·数据挖掘·数据分析·回归
Golang编程笔记5 小时前
电商数据分析的未来发展路径
ai·数据挖掘·数据分析
城数派13 小时前
2019-2025年各区县逐月新房房价数据(Excel/Shp格式)
大数据·数据分析·excel
橙露14 小时前
从零基础到实战:Python 数据分析三剑客(Pandas+NumPy+Matplotlib)核心应用指南
python·数据分析·pandas
YangYang9YangYan17 小时前
2026高职大数据与会计专业学数据分析的技术价值分析
大数据·数据挖掘·数据分析
FIT2CLOUD飞致云1 天前
操作教程|DataEase企业总-分公司数据填报场景搭建实践
数据分析·开源·数据可视化·dataease·bi
DX_水位流量监测1 天前
无人机测流之雷达流速仪监测技术分析
大数据·网络·人工智能·数据分析·自动化·无人机
YangYang9YangYan1 天前
中专大数据技术专业学习数据分析的价值分析
大数据·学习·数据分析
BEOL贝尔科技1 天前
生物冰箱智能锁如何帮助实验室做好生物样本保存工作的权限管理呢?
人工智能·数据分析
反向跟单策略1 天前
期货反向跟单—高频换人能够提高跟单效率?
大数据·人工智能·学习·数据分析·区块链