下面就为您详细讲解一下pandas中的数据去重处理的实现方法:
一、pandas中的数据去重方法
pandas中的数据去重方法主要有两个函数来实现,分别是drop_duplicates()
和duplicated()
。接下来我们将一一介绍这两个函数的使用方法。
1.1 duplicated()
duplicated()
函数可以帮助我们查看DataFrame或Series中的数据是否重复。它返回一个与原数组相同大小的布尔型序列,表示每个元素是否为重复元素(第一次出现为False,后面为True)。
其语法为:
df.duplicated(subset=None, keep='first')
subset
:列名或列名列表,用于指定重复判断时需要考虑的列,默认为所有列。keep
:{‘first’, ‘last’, False},表示哪些重复的元素(除第一次出现的元素)需要保留。默认值为’first’(保留第一次出现的元素),如果为’last’(保留最后一次出现的元素),则删除第一次出现的元素;如果为False,则删除所有重复的元素。
示例代码如下:
import pandas as pd
# 创建一个包含重复元素的DataFrame
df = pd.DataFrame({'A': [1, 1, 2, 2, 3, 4], 'B': ['a', 'a', 'b', 'b', 'c', 'd']})
# 输出去重前的数据
print('去重前的数据:')
print(df)
# 使用duplicated函数查看哪些元素是重复的
is_duplicate = df.duplicated()
# 输出结果
print('哪些元素是重复的:')
print(is_duplicate)
# 使用duplicated函数去重,保留第一次出现的元素
df.drop_duplicates(keep='first', inplace=True)
# 输出去重后的数据
print('去重后的数据:')
print(df)
以上示例输出的结果为:
去重前的数据:
A B
0 1 a
1 1 a
2 2 b
3 2 b
4 3 c
5 4 d
哪些元素是重复的:
0 False
1 True
2 False
3 True
4 False
5 False
dtype: bool
去重后的数据:
A B
0 1 a
2 2 b
4 3 c
5 4 d
从输出结果可以看到,使用duplicated函数可以得到一个布尔型序列,表示哪些元素是重复的。在去重时,我们可以使用drop_duplicates()
函数进行去重操作,去掉重复的元素并保留第一次出现的元素。
1.2 drop_duplicates()
drop_duplicates()
函数可以帮助我们去除DataFrame或Series中的重复元素(默认保留第一次出现的元素)。
其语法为:
df.drop_duplicates(subset=None, keep='first', inplace=False)
subset
:列名或列名列表,用于指定重复判断时需要考虑的列,默认为所有列。keep
:{‘first’, ‘last’, False},表示哪些重复的元素(除第一次出现的元素)需要保留。默认值为’first’(保留第一次出现的元素),如果为’last’(保留最后一次出现的元素),则删除第一次出现的元素;如果为False,则删除所有重复的元素。
示例代码如下:
import pandas as pd
# 创建一个包含重复元素的DataFrame
df = pd.DataFrame({'A': [1, 1, 2, 2, 3, 4], 'B': ['a', 'a', 'b', 'b', 'c', 'd']})
# 输出去重前的数据
print('去重前的数据:')
print(df)
# 使用drop_duplicates函数去重,保留第一次出现的元素
df.drop_duplicates(keep='first', inplace=True)
# 输出去重后的数据
print('去重后的数据:')
print(df)
以上示例输出的结果与使用duplicated()
函数的示例结果相同。
二、示例说明
为了更好地说明上述方法的使用,以下给出两个具体的示例。
2.1 示例1:去除字符串中的重复行
假设我们有一个字符串列表,想要去掉重复的行,只保留第一次出现的元素和其行号。我们可以将该列表转化为DataFrame,使用drop_duplicates()
函数进行去重。
示例代码如下:
import pandas as pd
# 创建一个字符串列表
str_list = ['hello', 'world', 'world', 'python', 'python', 'python']
# 将字符串列表转化为DataFrame,带上行号
df = pd.DataFrame({'A': range(len(str_list)), 'B': str_list})
# 输出原始数据
print('去重前的数据:')
print(df)
# 去除重复的行,并保留第一次出现的元素和其行号
df.drop_duplicates(keep='first', inplace=True)
# 输出去重后的数据
print('去重后的数据:')
print(df)
以上示例输出的结果为:
去重前的数据:
A B
0 0 hello
1 1 world
2 2 world
3 3 python
4 4 python
5 5 python
去重后的数据:
A B
0 0 hello
1 1 world
3 3 python
从输出结果可以看到,经过去重处理后,只保留了第一次出现的元素和其行号。
2.2 示例2:去除人名列表中的重复元素
假设我们有一个人名列表,想要去掉重复的元素,只保留第一次出现的元素和其出现次数。我们可以将该列表转化为Series,使用duplicated()
函数查看哪些元素是重复的,然后使用drop_duplicates()
函数进行去重。
示例代码如下:
import pandas as pd
# 创建一个人名列表
name_list = ['Tom', 'Jerry', 'David', 'Joan', 'Tom', 'Lucy', 'David', 'Tom', 'Joan']
# 将人名列表转化为Series
s = pd.Series(name_list)
# 输出原始数据
print('去重前的数据:')
print(s)
# 使用duplicated函数查看哪些元素是重复的
is_duplicate = s.duplicated()
# 输出结果
print('哪些元素是重复的:')
print(is_duplicate)
# 去除重复的元素,并保留第一次出现的元素和其出现次数
df = pd.DataFrame({'name': name_list})
df.drop_duplicates(keep='first', inplace=True)
df = pd.DataFrame({'name': df['name'], 'count': [len(df[df['name']==x]) for x in df['name']]})
# 输出去重后的数据
print('去重后的数据:')
print(df)
以上示例输出的结果为:
去重前的数据:
0 Tom
1 Jerry
2 David
3 Joan
4 Tom
5 Lucy
6 David
7 Tom
8 Joan
dtype: object
哪些元素是重复的:
0 False
1 False
2 False
3 False
4 True
5 False
6 True
7 True
8 True
dtype: bool
去重后的数据:
name count
0 Tom 3
1 Jerry 1
2 David 2
3 Joan 2
4 Lucy 1
从输出结果可以看到,经过去重处理后,我们得到了一个包含每个姓名和其出现次数的DataFrame。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas中的数据去重处理的实现方法 - Python技术站