🎈个人主页:豌豆射手^
🎉欢迎 👍点赞✍评论⭐收藏
🤗收录专栏:机器学习
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!
【机器学习】数据清洗 ——基于Pandas库的方法删除重复点
- 一 drop_duplicates() 介绍
- 二 删除重复行
- 三 指定删除重复点时的列
- 四 保留第一个或最后一个出现的重复点
- 五 原地修改DataFrame
- 六 总结
引言
在机器学习领域,高质量的数据是构建强大模型的基石。而数据清洗作为数据预处理的关键步骤之一,对于确保数据质量至关重要。
本博客将重点介绍基于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参数选择保留第一个或最后一个出现的重复点的策略,并提及了在处理大型数据集时需要注意的内存效率问题。
通过掌握这一技能,读者将能够更加轻松、灵活和高效地进行数据清洗,确保所使用的数据是准确、可靠且高质量的,为机器学习任务的成功打下坚实的基础。
这篇文章到这里就结束了
谢谢大家的阅读!
如果觉得这篇博客对你有用的话,别忘记三连哦。
我是甜美的江,让我们我们下次再见