Pandas_Select_Data_Duplicated_Drop_duplicates
如果要识别和删除DataFrame中的重复行,有两种方法可以提供帮助:duplicated和drop_duplicates。每个都将用于标识重复行的列作为参数。
duplicated 返回一个布尔向量,其长度为行数,表示行是否重复。
drop_duplicates 删除重复的行。
默认情况下,重复集的第一个观察行被认为是唯一的,但每个方法都有一个keep参数来指定要保留的目标。
- keep='first' (默认值):标记/删除重复项,第一次出现除外。
- keep='last':标记/删除重复项,除了最后一次出现。
- keep=False:标记/删除所有重复项。
data = pd.DataFrame({'a': list('aabbccddeeff'), 'b': list('aaaabbbbcccc'),
'c': np.random.randint(5, size=12),
'd': np.random.randint(9, size=12)})
duplicated
subset 参数
传入单列:
data.duplicated(subset='a')
out:
0 False
1 True
2 False
3 True
4 False
5 True
6 False
7 True
8 False
9 True
10 False
11 True
dtype: bool
传入多列
data.duplicated(subset=['a', 'b'])
out:
0 False
1 True
2 False
3 True
4 False
5 True
6 False
7 True
8 False
9 True
10 False
11 True
dtype: bool
选择重复数据
data[data.duplicated(subset='a')]
out:
a b c d
1 a a 4 2
3 b a 4 2
5 c b 1 6
7 d b 2 1
9 e c 0 0
11 f c 3 4
data[data.duplicated(subset=['a','b'])]
out:
a b c d
1 a a 4 2
3 b a 4 2
5 c b 1 6
7 d b 2 1
9 e c 0 0
11 f c 3 4
keep参数
data.duplicated(subset='a', keep='first')
out:
0 False
1 True
2 False
3 True
4 False
5 True
6 False
7 True
8 False
9 True
10 False
11 True
dtype: bool
data.duplicated(subset='a', keep='last')
out:
0 True
1 False
2 True
3 False
4 True
5 False
6 True
7 False
8 True
9 False
10 True
11 False
dtype: bool
data.duplicated(subset='a', keep=False)
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
9 True
10 True
11 True
dtype: bool
drop_duplicates()
subset参数
data.drop_duplicates(subset='a')
out:
a b c d
0 a a 3 3
2 b a 3 7
4 c b 2 3
6 d b 3 3
8 e c 4 5
10 f c 4 8
data.drop_duplicates(subset=['a','b'])
out:
a b c d
0 a a 3 3
2 b a 3 7
4 c b 2 3
6 d b 3 3
8 e c 4 5
10 f c 4 8
keep参数
data.drop_duplicates(subset='a', keep='first')
out:
a b c d
0 a a 3 3
2 b a 3 7
4 c b 2 3
6 d b 3 3
8 e c 4 5
10 f c 4 8
data.drop_duplicates(subset='b', keep='last')
out:
a b c d
3 b a 4 2
7 d b 2 1
11 f c 3 4
data.drop_duplicates(subset='a', keep=False)
out:
a b c d
根据索引值选择重复项
data.set_index('a', inplace=True)
data.head()
out:
b c d
a
a a 3 3
a a 4 2
b a 3 7
b a 4 2
c b 2 3
data.index.duplicated()
out:
array([False, True, False, True, False, True, False, True, False,
True, False, True])
data[data.index.duplicated()]
out:
b c d
a
a a 4 2
b a 4 2
c b 1 6
d b 2 1
e c 0 0
f c 3 4