导读:本期聚焦于小伙伴创作的《Python中Pandas如何删除重复数据?使用drop_duplicates方法去重实战指南》,敬请观看详情。数据表中混入重复记录会直接拉低统计结果的准确性,用Pandas做清洗时,drop_duplicates是最常用的去重手段。该方法默认按所有列判断整行是否重复,也支持指定子集列、保留首次或末次出现的数据。实际处理时若忽略keep参数与inplace用法,容易造成误删或原数据未被修改。文章将结合具体代码说明如何基于单列或多列去重,如何处理空值对判重的影响,并对比subset与ignore_index配置在真实业务中的差异,帮助你写出稳健的清洗逻辑。

在数据处理工作中,重复行是极其常见的问题。Pandas提供的drop_duplicates方法能够帮助我们快速识别并移除DataFrame中的重复记录。理解它的参数设计和执行逻辑,是写出可靠数据清洗代码的基础。

Python中Pandas如何删除重复数据?使用drop_duplicates方法去重实战指南

drop_duplicates方法基本用法

drop_duplicates是DataFrame对象的内置方法,调用后会返回一个新的DataFrame,其中剔除了被判定为重复的行。默认情况下,它会比较所有列的值,只有当每一列都完全相同时,才认为两行重复。这种全列比对方式适合结构整齐、无无关噪声列的数据集。

下面是一段最基础的示例,展示如何对包含重复行的数据进行整体去重:

import pandas as pd

data = {
    'name': ['张三', '李四', '张三', '王五', '李四'],
    'score': [88, 75, 88, 90, 75]
}
df = pd.DataFrame(data)
print('去重前:')
print(df)

df_clean = df.drop_duplicates()
print('去重后:')
print(df_clean)

上述代码中,两条“张三,88”和两条“李四,75”会被识别为重复,最终仅保留各自首次出现的记录。如果不希望生成新对象,而是直接修改原DataFrame,可以传入参数inplace=True,此时方法返回值为None,原对象被改变。

基于指定列子集去重

真实业务里,我们往往只关心某些关键字段是否重复,例如用户ID或订单编号,而不希望因为某一列无关信息不同就保留重复主体。这时应使用subset参数,传入一个列名列表,告诉Pandas只在这些列上做判重。

以下示例仅根据name列去重,忽略score差异:

import pandas as pd

data = {
    'name': ['张三', '李四', '张三', '王五', '李四'],
    'score': [88, 75, 92, 90, 80]
}
df = pd.DataFrame(data)

# 仅按name去重,保留首次出现
df_sub = df.drop_duplicates(subset=['name'])
print(df_sub)

运行后,第二个“张三”和第二个“李四”因name重复被删除,即使它们的score不同。这在按主体归并数据时非常实用。但要注意,如果subset指定的列中存在空值NaN,Pandas会认为NaN与NaN之间不算相同,因此含NaN的行不会被当作重复项移除,这是初学者经常踩的坑。

控制保留策略与索引重置

keep参数决定了当重复出现时保留哪一条。可选值为first(默认,保留第一次出现)、last(保留最后一次出现)以及False(全部重复项都不保留,只留唯一值)。合理选择keep可以在时间序列数据中保留最新或最旧记录。

同时,去重后原索引会保留,可能出现不连续的情况。若想获得从0开始的新索引,可设置ignore_index=True。

import pandas as pd

data = {
    'order_id': ['A1', 'A2', 'A1', 'A3', 'A2'],
    'amount': [100, 200, 150, 300, 250]
}
df = pd.DataFrame(data)

# 按order_id去重,保留最后一次,重置索引
df_last = df.drop_duplicates(
    subset=['order_id'],
    keep='last',
    ignore_index=True
)
print(df_last)

在这个例子中,同样order_id的不同金额记录,程序保留了后面出现的那一条,并且索引被整理为0、1、2。相比手动写循环比对,drop_duplicates在底层使用了哈希表优化,处理百万级数据时效率明显高于纯Python写法。

去重逻辑中的常见误区

一个容易混淆的概念是:drop_duplicates并不会修改原始数据,除非显式设置inplace=True。很多人在调用后打印原变量,发现重复行还在,便误以为方法失效。实际上应接收返回值或确认inplace行为。

另外,当DataFrame包含浮点数列时,由于精度问题,看似相等的数可能被判定为不同。若业务允许,可先使用round函数统一精度再去重,或借助numpy的isclose做自定义判重逻辑,而不是单纯依赖drop_duplicates的默认等值比较。

import pandas as pd

data = {
    'val': [0.1 + 0.2, 0.3, 0.1 + 0.2, 0.4]
}
df = pd.DataFrame(data)
# 先四舍五入再去重
df['val'] = df['val'].round(2)
df_unique = df.drop_duplicates()
print(df_unique)

通过上述处理,0.1+0.2与0.3在保留两位小数后都被视为0.3,从而被正确识别为重复。掌握这些细节,才能让Pandas去重真正服务于干净的数据管道。

Pandasdrop_duplicates数据去重修改时间:2026-08-05 01:33:24

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。