【机器学习】数据清洗——基于Pandas库的方法删除重复点

简介: 【机器学习】数据清洗——基于Pandas库的方法删除重复点



引言

在机器学习领域,高质量的数据是构建强大模型的基石。而数据清洗作为数据预处理的关键步骤之一,对于确保数据质量至关重要。

本博客将重点介绍基于Pandas库的强大功能,特别是drop_duplicates()方法,来处理数据中的重复点。通过深入了解这一方法及其不同应用场景,读者将能够更有效地进行数据清洗,为机器学习任务打下坚实的基础。

一 drop_duplicates() 介绍

drop_duplicates() 方法是 Pandas 库中用于删除 DataFrame 中重复数据的方法。

它返回一个新的 DataFrame,其中不包含重复的行或列。

这个方法有几个重要的参数:

subset:指定要用来判断重复的列或列的组合。默认为 None,表示考虑整个 DataFrame 的所有列。

keep:指定保留重复值的方式。可以是 ‘first’(默认值,保留第一个出现的重复值)、‘last’(保留最后一个出现的重复值)或

False(删除所有重复值)。

inplace:指定是否在原 DataFrame 上直接进行修改,而不是返回一个新的 DataFrame。默认为 False。

二 删除重复行

Pandas提供了drop_duplicates()方法,可以用于删除DataFrame中的重复行。

这个方法会返回一个新的DataFrame,其中不包含重复的行。

示例:

import pandas as pd
# 假设df是一个包含重复点的DataFrame
df = pd.DataFrame({'A': [1, 2, 2, 3, 3],
                   'B': ['a', 'b', 'b', 'c', 'c']})
# 使用drop_duplicates()方法删除重复行
df_unique = df.drop_duplicates()
print(df_unique)

输出:

A  B
0  1  a
1  2  b
3  3  c

在上面的例子中,原始DataFrame df 包含重复的行,经过drop_duplicates()方法处理后,返回了一个新的DataFrame df_unique,其中不包含重复的行。

三 指定删除重复点时的列

drop_duplicates()方法还可以接受subset参数,用于指定删除重复点时的列。

默认情况下,该方法会考虑所有的列,但你也可以通过subset参数指定特定的列进行重复点的判断。

示例

import pandas as pd
# 创建一个包含重复点的DataFrame
# 注意列A中有重复值,但列B中的值是不同的
df = pd.DataFrame({
    'A': [1, 1, 2, 2, 3],
    'B': ['a', 'b', 'c', 'd', 'e']
})
print("原始DataFrame:")
print(df)
# 使用drop_duplicates()方法,并指定subset参数为列A
# 这意味着只会基于列A的值来判断和删除重复点
df_c = df.drop_duplicates(subset=['A'])
print("\n基于列处理后的DataFrame:")
print(df_c)
#使用drop_duplicates()方法,不指定subset参数为列A
df_r = df.drop_duplicates()
print("\n基于行处理后的DataFrame:")
print(df_r)

输出

原始DataFrame:
   A  B
0  1  a
1  1  b
2  2  c
3  2  d
4  3  e
基于列处理后的DataFrame:
   A  B
0  1  a
2  2  c
4  3  e
基于行处理后的DataFrame:
   A  B
0  1  a
1  1  b
2  2  c
3  2  d
4  3  e

代码分析:

以上代码首先创建了一个包含重复数据的 DataFrame,其中列 A 中有重复值,但列 B 中的值是不同的。

接着使用 drop_duplicates() 方法,并指定 subset 参数为列 A,这意味着只会基于列 A的值来判断和删除重复的数据点。

处理后的 DataFrame df_c 中只保留了列 A 中的唯一值,并保留了每个唯一值对应的第一个出现的行。

然后,代码使用 drop_duplicates() 方法没有指定 subset 参数,这意味着将考虑整个 DataFrame 的所有列进行去重。

因为B列全是不同的数据,故DataFrame 并没有发生变化。

四 保留第一个或最后一个出现的重复点

drop_duplicates()方法默认保留第一个出现的重复点,但你也可以通过keep参数指定保留最后一个出现的重复点,或者将所有重复点都删除。

示例

import pandas as pd
# 创建一个包含重复点的DataFrame
df = pd.DataFrame({
    'A': [1, 1, 2, 2, 3, 3],
    'B': ['a', 'b', 'c', 'd', 'e', 'f']
})
print("原始DataFrame:")
print(df)
# 保留第一个出现的重复点
df_first = df.drop_duplicates(subset=['A'],keep='first')
print("\n保留第一个出现的重复点处理后的DataFrame:")
print(df_first)
# 保留最后一个出现的重复点
df_last = df.drop_duplicates(subset=['A'],keep='last')
print("\n保留最后一个出现的重复点处理后的DataFrame:")
print(df_last)

运行结果:

原始DataFrame:
   A  B
0  1  a
1  1  b
2  2  c
3  2  d
4  3  e
5  3  f
保留第一个出现的重复点处理后的DataFrame:
   A  B
0  1  a
2  2  c
4  3  e
保留最后一个出现的重复点处理后的DataFrame:
   A  B
1  1  b
3  2  d
5  3  f

代码分析:

以上代码首先创建了一个包含重复数据的 DataFrame,其中列 A 中有重复值,但列 B 中的值是不同的,并且相同列A对应的B元素是不一样的。

接着,使用 drop_duplicates() 方法并指定 subset 参数为列 A,同时设置 keep 参数为 ‘first’,这意味着保留每个重复值中的第一个出现的数据点。

处理后的 DataFrame df_first 中只保留了列 A 中的唯一值,并保留了每个唯一值对应的第一个出现的行。

然后,再次使用 drop_duplicates() 方法指定 subset 参数为列 A,但这次设置 keep 参数为’last’,这意味着保留每个重复值中的最后一个出现的数据点。

处理后的 DataFrame df_last 中只保留了列 A 中的唯一值,并保留了每个唯一值对应的最后一个出现的行。

从代码结果可以看出,因为相同列A对应的B元素是不一样的,所以这两种方式删除重复点后的结果也是不一样

总体而言,这段代码演示了通过 drop_duplicates() 方法结合 subset 和 keep 参数来实现不同的去重策略,分别保留第一个和最后一个出现的重复点,从而得到两个不同的处理后的 DataFrame。

五 原地修改DataFrame

默认情况下,drop_duplicates()方法返回一个新的DataFrame,而不改变原始DataFrame。

但你也可以通过inplace参数将修改应用到原始DataFrame上。

示例

import pandas as pd
# 创建一个包含重复数据的 DataFrame
data = {
    'A': [1, 1, 2, 2, 3],
    'B': ['a', 'b', 'c', 'c', 'd']
}
df = pd.DataFrame(data)
# 显示原始 DataFrame
print("原始 DataFrame:")
print(df)
# 删除重复点,并显示修改后的结果
df.drop_duplicates(inplace=True)
print("\n删除重复点后的 原始DataFrame:")
print(df)

运行结果:

原始 DataFrame:
   A  B
0  1  a
1  1  b
2  2  c
3  2  c
4  3  d
删除重复点后的 原始DataFrame:
   A  B
0  1  a
1  1  b
2  2  c
4  3  d

在这个例子中,通过inplace=True参数,我们在原地修改了DataFrame,不再返回新的DataFrame,同时原始DataFrame也发生了改变,变为了删除重复值的样子。

将inplace参数改为False,我们会发现输出结果中,原始dataframe并没有发生改变,如:

import pandas as pd
# 创建一个包含重复数据的 DataFrame
data = {
    'A': [1, 1, 2, 2, 3],
    'B': ['a', 'b', 'c', 'c', 'd']
}
df = pd.DataFrame(data)
# 显示原始 DataFrame
print("原始 DataFrame:")
print(df)
# 删除重复点,并显示修改后的结果
df.drop_duplicates(inplace=False)
print("\n删除重复点后的 原始DataFrame:")
print(df)

输出结果:

原始 DataFrame:
   A  B
0  1  a
1  1  b
2  2  c
3  2  c
4  3  d
删除重复点后的 原始DataFrame:
   A  B
0  1  a
1  1  b
2  2  c
3  2  c
4  3  d

六 总结

在本博客中,我们深入探讨了机器学习中数据清洗的关键任务之一——删除重复点的方法,重点介绍了基于Pandas库的drop_duplicates()方法。

我们详细讨论了如何使用这一方法删除数据中的重复行,以及在多列情况下如何指定删除重复点的列,强调了方法的灵活性。

同时,我们解释了通过keep参数选择保留第一个或最后一个出现的重复点的策略,并提及了在处理大型数据集时需要注意的内存效率问题。

通过掌握这一技能,读者将能够更加轻松、灵活和高效地进行数据清洗,确保所使用的数据是准确、可靠且高质量的,为机器学习任务的成功打下坚实的基础。

这篇文章到这里就结束了

谢谢大家的阅读!

如果觉得这篇博客对你有用的话,别忘记三连哦。

我是甜美的江,让我们我们下次再见

相关文章
|
1月前
|
机器学习/深度学习 存储 设计模式
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
本文探讨了数据基础设施设计中常见的一个问题:数据仓库或数据湖仓中的表格缺乏构建高性能机器学习模型所需的历史记录,导致模型性能受限。为解决这一问题,文章介绍了缓慢变化维度(SCD)技术,特别是Type II类型的应用。通过SCD,可以有效追踪维度表的历史变更,确保模型训练数据包含完整的时序信息,从而提升预测准确性。文章还从数据工程师、数据科学家和产品经理的不同视角提供了实施建议,强调历史数据追踪对提升模型性能和业务洞察的重要性,并建议采用渐进式策略逐步引入SCD设计模式。
93 8
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
|
3月前
|
数据采集 数据挖掘 数据处理
如何使用 Pandas 库进行数据清洗和预处理?
数据清洗和预处理是数据分析中至关重要的步骤,Pandas库提供了丰富的函数和方法来完成这些任务
175 64
|
3月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
192 6
|
2月前
|
数据采集 分布式计算 大数据
Pandas数据清洗:缺失值处理
本文详细介绍了Pandas库中处理缺失值的方法,包括检测缺失值、删除缺失值、填充缺失值和插值法填充缺失值。通过基础概念和代码示例,帮助读者理解和解决数据清洗中常见的缺失值问题。
166 80
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
260 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
2月前
|
机器学习/深度学习 传感器 运维
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
本文探讨了时间序列分析中数据缺失的问题,并通过实际案例展示了如何利用机器学习技术进行缺失值补充。文章构建了一个模拟的能源生产数据集,采用线性回归和决策树回归两种方法进行缺失值补充,并从统计特征、自相关性、趋势和季节性等多个维度进行了详细评估。结果显示,决策树方法在处理复杂非线性模式和保持数据局部特征方面表现更佳,而线性回归方法则适用于简单的线性趋势数据。文章最后总结了两种方法的优劣,并给出了实际应用建议。
126 7
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
|
3月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
67 6
|
3月前
|
机器学习/深度学习 数据采集 算法
机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用
医疗诊断是医学的核心,其准确性和效率至关重要。本文探讨了机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用。文章还讨论了Python在构建机器学习模型中的作用,面临的挑战及应对策略,并展望了未来的发展趋势。
252 1
|
3月前
|
机器学习/深度学习 数据采集 数据处理
谷歌提出视觉记忆方法,让大模型训练数据更灵活
谷歌研究人员提出了一种名为“视觉记忆”的方法,结合了深度神经网络的表示能力和数据库的灵活性。该方法将图像分类任务分为图像相似性和搜索两部分,支持灵活添加和删除数据、可解释的决策机制以及大规模数据处理能力。实验结果显示,该方法在多个数据集上取得了优异的性能,如在ImageNet上实现88.5%的top-1准确率。尽管有依赖预训练模型等限制,但视觉记忆为深度学习提供了新的思路。
56 2
|
4月前
|
机器学习/深度学习 数据采集 数据挖掘
特征工程在营销组合建模中的应用:基于因果推断的机器学习方法优化渠道效应估计
因果推断方法为特征工程提供了一个更深层次的框架,使我们能够区分真正的因果关系和简单的统计相关性。这种方法在需要理解干预效果的领域尤为重要,如经济学、医学和市场营销。
143 1
特征工程在营销组合建模中的应用:基于因果推断的机器学习方法优化渠道效应估计