当前位置: 首页 > article >正文

Python数据分析中的Pandas去重操作详解

大家好,在数据分析的过程中,数据去重(Removing Duplicates)是非常常见的操作。由于数据的来源多样,数据集可能会包含许多重复记录,特别是在合并或拼接多个数据集时。Pandas提供了方便的去重工具,可以帮助高效地检测和删除重复记录,从而保持数据的整洁性和唯一性。

Pandas提供了drop_duplicates()函数用于去除DataFrame中的重复记录。该函数可以根据指定的列或整个行进行去重操作,并且支持灵活的参数设置。

1.Pandas基本去重用法

drop_duplicates()函数用于检测并删除DataFrame中的重复行,默认情况下,它会根据所有列来判断行是否重复。

import pandas as pd

# 创建一个包含重复记录的DataFrame
data = {'姓名': ['张三', '李四', '张三', '王五', '张三'],
        '年龄': [20, 21, 20, 22, 20],
        '性别': ['男', '女', '男', '男', '男']}

df = pd.DataFrame(data)

# 使用drop_duplicates()去除重复记录
df_unique = df.drop_duplicates()

print(df_unique)

输出结果:

   姓名  年龄 性别
0  张三  20  男
1  李四  21  女
3  王五  22  男

在这个示例中,drop_duplicates()函数会默认根据所有列检测并去除重复的行。可以看到,重复的“张三”记录被去除了,保留了第一条出现的记录。

2.根据特定列进行去重

在实际操作中,通常需要根据特定列进行去重。例如,如果只想根据“姓名”字段进行去重,而不考虑其他列,可以使用subset参数。

# 仅根据“姓名”列进行去重
df_unique_name = df.drop_duplicates(subset=['姓名'])

print(df_unique_name)

输出结果:

   姓名  年龄 性别
0  张三  20  男
1  李四  21  女
3  王五  22  男

在这个示例中,drop_duplicates()仅根据“姓名”列判断是否有重复记录,保留了“张三”第一次出现的行,而忽略了其他的重复记录。

3.保留重复记录的最后一条

默认情况下,drop_duplicates()函数会保留第一次出现的重复记录,如果希望保留最后一次出现的记录,可以使用keep='last'参数。

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

print(df_unique_last)

输出结果:

   姓名  年龄 性别
1  李四  21  女
3  王五  22  男
4  张三  20  男

在这个示例中,使用了keep='last'参数,保留了最后一条出现的“张三”记录。

4.删除所有重复记录

如果希望删除所有重复记录,只保留唯一的行,可以将keep参数设置为False,这会删除所有重复的行,且不保留任何重复记录。

# 删除所有重复记录
df_no_duplicates = df.drop_duplicates(keep=False)

print(df_no_duplicates)

输出结果:

   姓名  年龄 性别
1  李四  21  女
3  王五  22  男

在这个示例中,所有的“张三”记录都被删除了,只保留了不重复的记录。

5.去重时保留特定列的最大值或最小值

在一些实际应用中,我们希望根据某一列的值进行去重,并保留该列值最大或最小的记录。通过Pandas的groupby()方法,可以实现这种操作。

# 根据“姓名”去重,并保留每个姓名对应的最大年龄
df_max_age = df.sort_values('年龄').drop_duplicates(subset=['姓名'], keep='last')

print(df_max_age)

输出结果:

   姓名  年龄 性别
1  李四  21  女
3  王五  22  男
4  张三  20  男

在这个示例中,首先对“年龄”列进行排序,然后使用drop_duplicates()保留每个“姓名”对应的最大年龄记录。

6.检查数据是否包含重复项

除了删除重复项,有时只想检查数据是否包含重复记录。Pandas的duplicated()函数可以返回一个布尔值序列,用于表示每一行是否是重复记录。

# 检查数据中的重复记录
duplicates = df.duplicated()

print(duplicates)

输出结果:

0    False
1    False
2     True
3    False
4     True
dtype: bool

在这个示例中,duplicated()函数返回一个布尔值序列,其中True表示该行是重复记录,False表示该行是唯一记录。

7.删除重复值并保留某列的最小值

在某些情况下,可能想根据某一列去除重复值,并保留该列的最小值。可以结合groupby()方法来实现。

# 根据“姓名”去重,并保留每个姓名对应的最小年龄
df_min_age = df.sort_values('年龄').drop_duplicates(subset=['姓名'], keep='first')

print(df_min_age)

输出结果:

   姓名  年龄 性别
0  张三  20  男
1  李四  21  女
3  王五  22  男

在这个示例中,先按“年龄”升序排序,然后使用drop_duplicates()保留每个“姓名”对应的最小年龄。

8.高级应用:对大规模数据集进行去重

在处理大量数据集时,去重操作可能会变得较为复杂。通过合理使用Pandas的去重方法,可以有效提升处理大数据的效率。

import pandas as pd

# 创建大规模随机数据集
data = pd.DataFrame({
    'ID': range(1, 1000001),
    '值': pd.np.random.randint(1, 100, size=1000000)
})

# 去除重复记录
data_unique = data.drop_duplicates()

print(f"去重后的记录数:{data_unique.shape[0]}")

在这个示例中,处理了一个包含100万条数据的DataFrame,并使用drop_duplicates()去除重复记录。

通过掌握Pandas的去重方法,可以更好地处理数据清洗过程中的重复问题,提升数据分析的准确性和效率。去重操作是数据清洗中的重要步骤,尤其在处理大规模数据时,合理使用Pandas的去重功能可以有效优化数据处理的性能。


http://www.kler.cn/a/389099.html

相关文章:

  • 10款PDF翻译工具的探索之旅:我的使用经历与工具特色!!
  • 外星人入侵
  • 2-UML概念模型测试
  • void * 指针与整数进行加减运算
  • Java-Redisson分布式锁+自定义注解+AOP的方式来实现后台防止重复请求扩展
  • TVM计算图分割--分割方式
  • mysql备份数据库及恢复
  • Elasticsearch和Lucene之间是什么关系?(ChatGPT回答)
  • 小米面试:什么是线程池?工作原理是什么?线程池可以动态修改吗?
  • 【python】路径与文件管理:pathlib库的现代用法
  • 【WRF后处理】基于wrf-python处理wrf运行结果wrfout_d01
  • Linux:基本开发工具
  • 【go从零单排】Rate Limiting限流
  • 成都爱尔小儿眼科及视光团队多人当选“近视防控专家委员会委员”
  • CSS3_3D变换(七)
  • Vue CLI 脚手架
  • ubuntu 22.04 防火墙 ufw
  • imu_tk配置教程(锁死ubuntu18.04,不要22.04)
  • Spark的yarn集群环境搭建
  • C++ OpenCV 理想滤波
  • 挖掘web程序中的OAuth漏洞:利用redirect_uri和state参数接管账户
  • linux centos 安装redis
  • Qt_day4_Qt_UI设计
  • 骨传导耳机排行榜前十分享:十大超值骨传导耳机测评推荐!
  • NoSQL大数据存储技术测试(3)Hadoop和HBase简介
  • AI产品经理:新兴行业的新宠儿,站在风口上的猪都能飞上天