pandas中的duplicated()和drop_duplicates()

duplicated()

Pandas 中,duplicated() 是一个非常实用的方法,用于标识重复的行。它返回一个布尔值的 Series,标识哪些行是重复的,默认情况下标识除了第一次出现的所有重复行。

duplicated() 方法的基本用法:

DataFrame.duplicated(subset=None, keep='first')

参数说明:

  • subset:用于判断重复的列。如果没有指定,默认会检查所有列。

  • keep

    :控制哪一条记录被标记为重复:

    • 'first'(默认):标记除了第一次出现的记录外,其他重复的行。
    • 'last':标记除了最后一次出现的记录外,其他重复的行。
    • False:标记所有重复的行(包括第一次和最后一次)。

返回值:

duplicated() 返回一个布尔类型的 Series,标记哪些行是重复的。True 表示该行是重复的,False 表示该行是第一次出现。


例子:

假设有一个包含重复数据的 DataFrame

import pandas as pd

# 示例数据
data = {
    'id': [1, 2, 2, 3, 4, 4, 5],
    'name': ['Alice', 'Bob', 'Bob', 'Charlie', 'David', 'David', 'Eve'],
    'age': [25, 30, 30, 35, 40, 40, 45]
}

df = pd.DataFrame(data)

print(df)

输出:

id     name  age
0   1    Alice   25
1   2      Bob   30
2   2      Bob   30
3   3  Charlie   35
4   4    David   40
5   4    David   40
6   5      Eve   45
示例 1:标记重复的行(默认 keep='first'
# 使用 duplicated() 查找重复的行
duplicates = df.duplicated()

print(duplicates)

输出:

0    False
1    False
2     True
3    False
4    False
5     True
6    False
dtype: bool
  • 解释duplicated() 会标记除第一次出现的记录之外的所有重复记录。返回的布尔值 Series 表示哪些行是重复的,True 表示是重复的行,False 表示是第一次出现的行。
  • 例如,id=2id=4 的行是重复的,所以下标为 2 和 5 的行会被标记为 True
示例 2:标记最后一次出现的重复记录(keep='last'
# 使用 duplicated() 查找重复的行,但保留最后一次出现的记录
duplicates_last = df.duplicated(keep='last')

print(duplicates_last)

输出:

0    False
1    False
2     True
3    False
4    False
5     True
6    False
dtype: bool
  • 解释keep='last' 时,duplicated() 会标记除了最后一次出现的记录外,其他重复记录为 True。所以,id=2id=4 的第二次出现会被标记为 True,而第一次出现会标记为 False
示例 3:标记所有重复记录(keep=False

585. 2016年的投资

619. 只出现一次的最大数字

# 使用 duplicated() 查找所有的重复行,包括第一次和最后一次
duplicates_all = df.duplicated(keep=False)

print(duplicates_all)

输出:

0    False
1     True
2     True
3    False
4     True
5     True
6    False
dtype: bool
  • 解释keep=False 时,duplicated() 会标记所有的重复记录为 True,包括第一次出现的记录。
示例 4:根据特定列判断重复项
# 使用 'id' 列来判断重复
duplicates_subset = df.duplicated(subset=['id'])

print(duplicates_subset)

输出:

0    False
1    False
2     True
3    False
4    False
5     True
6    False
dtype: bool
  • 解释subset=['id'] 表示只根据 id 列来判断重复项。id=2id=4 会被标记为重复,第二次出现时标记为 True,第一次出现时标记为 False
示例 5:删除重复行(基于 duplicated()

你可以使用 duplicated() 来标记重复项,然后结合 DataFrame 的布尔索引删除重复项。例如,要删除所有重复的行,保留第一次出现的记录:

df_no_duplicates = df[~df.duplicated()]

print(df_no_duplicates)

输出:

id     name  age
0   1    Alice   25
1   2      Bob   30
3   3  Charlie   35
4   4    David   40
6   5      Eve   45
  • 解释~df.duplicated() 返回的是 duplicated() 布尔 Series 的反向值,~TrueFalse~FalseTrue,因此通过 df[~df.duplicated()] 可以保留第一次出现的记录,删除后续的重复行。
示例 6:修改原始 DataFrame(使用 inplace=True
df.drop_duplicates(inplace=True)

print(df)
  • 解释drop_duplicates() 会修改原始的 DataFrame,删除重复行。

总结:

  • duplicated() 方法用于标记重复行,返回一个布尔值 Series,表示哪些行是重复的。

  • keep
    

    参数可以控制保留哪一条记录:

    • 'first'(默认):标记除了第一次出现的记录外,其他重复行。
    • 'last':标记除了最后一次出现的记录外,其他重复行。
    • False:标记所有重复的行,包括第一次和最后一次出现的行。
  • subset 参数允许你只根据特定的列来判断重复项。

  • 结合 duplicated() 和布尔索引,可以删除重复的行。

drop_duplicates()

1084. 销售分析 III

Pandas 中,drop_duplicates() 是一个非常实用的函数,用于去除重复的行(或列)。它允许你根据特定的列或整个数据框来删除重复项。

drop_duplicates() 方法的基本用法:

DataFrame.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)

参数说明:

  • subset:指定哪些列用于判断重复。如果没有指定,默认情况下会根据所有列判断重复。

  • keep

    :决定保留哪一条重复记录:

    • 'first'(默认):保留首次出现的记录,删除后续的重复项。
    • 'last':保留最后一条记录,删除之前的重复项。
    • False:删除所有重复项。
  • inplace:是否在原始数据上进行修改。如果为 True,则会直接修改原始 DataFrame,并返回 None;如果为 False(默认),则返回一个新的 DataFrame

  • ignore_index:是否重新索引。默认为 False,如果为 True,则会重新排列索引。

例子:

假设有一个包含重复数据的 DataFrame

import pandas as pd

# 示例数据
data = {
    'id': [1, 2, 2, 3, 4, 4, 5],
    'name': ['Alice', 'Bob', 'Bob', 'Charlie', 'David', 'David', 'Eve'],
    'age': [25, 30, 30, 35, 40, 40, 45]
}

df = pd.DataFrame(data)

print(df)

输出:

   id     name  age
0   1    Alice   25
1   2      Bob   30
2   2      Bob   30
3   3  Charlie   35
4   4    David   40
5   4    David   40
6   5      Eve   45
示例 1:去除所有重复的行(基于所有列)
df_no_duplicates = df.drop_duplicates()

print(df_no_duplicates)

输出:

id     name  age
0   1    Alice   25
1   2      Bob   30
3   3  Charlie   35
4   4    David   40
6   5      Eve   45
  • 解释:默认情况下,drop_duplicates() 会检查所有列的重复项,并删除后面的重复行,只保留第一条出现的记录。
示例 2:根据某一列去重(例如:根据 id 列)
df_no_duplicates = df.drop_duplicates(subset=['id'])

print(df_no_duplicates)

输出:

id     name  age
0   1    Alice   25
1   2      Bob   30
3   3  Charlie   35
4   4    David   40
6   5      Eve   45
  • 解释subset=['id'] 表示根据 id 列来检查重复项。重复的 id=2id=4 被删除,只保留每个 id 的第一次出现。
示例 3:保留最后一次出现的重复记录
df_no_duplicates = df.drop_duplicates(subset=['id'], keep='last')

print(df_no_duplicates)

输出:

id     name  age
0   1    Alice   25
2   2      Bob   30
3   3  Charlie   35
5   4    David   40
6   5      Eve   45
  • 解释:通过 keep='last',我们选择保留重复项中最后一次出现的记录。
示例 4:删除所有重复的行(不保留任何重复项)
df_no_duplicates = df.drop_duplicates(subset=['id'], keep=False)

print(df_no_duplicates)

输出:

id     name  age
0   1    Alice   25
3   3  Charlie   35
6   5      Eve   45
  • 解释keep=False 表示删除所有重复的记录,包括第一次出现的记录。因此,只有没有重复的行被保留下来。
示例 5:修改原始 DataFrame(使用 inplace=True

511. 游戏玩法分析 I

176. 第二高的薪水

177. 第N高的薪水

df.drop_duplicates(subset=['id'], keep='first', inplace=True)

print(df)

输出:

id     name  age
0   1    Alice   25
1   2      Bob   30
3   3  Charlie   35
4   4    David   40
6   5      Eve   45
  • 解释:使用 inplace=True 后,drop_duplicates() 会直接在原始 df 上进行修改,而不是返回一个新的 DataFrame
示例 6:重新索引
df_no_duplicates = df.drop_duplicates(subset=['id'], keep='first', ignore_index=True)

print(df_no_duplicates)

输出:

id     name  age
0   1    Alice   25
1   2      Bob   30
2   3  Charlie   35
3   4    David   40
4   5      Eve   45
  • 解释:使用 ignore_index=True 后,删除重复行后会重新排列索引,从 0 开始。

总结:

  • drop_duplicates() 是一个非常实用的方法,可以帮助你快速清理重复的数据。
  • subset 参数允许你根据指定的列来判断是否为重复数据。
  • keep 参数控制保留哪一条记录:'first'(默认)、'last'False(删除所有重复项)。
  • 使用 inplace=True 可以直接修改原始 DataFrame,而不是返回一个新的 DataFrame
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值