Pandas中df['id'].duplicated()与df[df.duplicated('id')]的区别
Pandas中两种重复判断写法的差异
二者核心差异在于返回的数据类型、包含的内容完全不同,打印输出不可能一致,具体区别如下:
df['id'].duplicated()
是对单独取出的id列(Series类型)调用重复判断方法,返回值是和原id列等长的布尔型Series:每个位置的值为True/False,标记对应行的id是否为重复值(默认规则:同个id第一次出现时标记为False,后续重复出现的行标记为True)。打印时只会输出带行索引的布尔序列,不会展示原DataFrame的其他列数据。df[df.duplicated('id')]
是先对整个DataFrame调用重复判断方法、指定按id列识别重复,得到和原DataFrame等长的布尔Series后,再通过布尔索引做行筛选,最终返回值是所有被标记为重复的行组成的新DataFrame,会包含原表的所有列,打印出来是结构化的表格数据。
补充说明:两种写法默认的重复判断逻辑(
keep='first')是完全一致的,但返回结果的形态天差地别:前者是用于筛选、标记的布尔掩码,后者是直接筛选完成的重复行数据集。
你可以用下面的测试代码直观看到二者输出的区别:
import pandas as pd # 构造测试数据 df = pd.DataFrame({ 'id': [1, 2, 1, 3, 2], 'content': ['行1', '行2', '行3', '行4', '行5'] }) print("=== df['id'].duplicated() 输出 ===") print(df['id'].duplicated()) print("\n=== df[df.duplicated('id')] 输出 ===") print(df[df.duplicated('id')])
运行后输出结果对比如下:
=== df['id'].duplicated() 输出 === 0 False 1 False 2 True 3 False 4 True Name: id, dtype: bool === df[df.duplicated('id')] 输出 === id content 2 1 行3 4 2 行5
内容的提问来源于stack exchange,提问作者On J
相关产品推荐
相关产品推荐

