数据去重方法python_Python去重方法

1、利用集合set的特性

>>> lst = [1, 2 , 2, 3, 3, 5, 6, 7, 2, 1]

>>> list(set(lst))

[1, 2, 3, 5, 6, 7]

>>>

可以通过列表中索引(index)的方法保证去重后的顺序不变

>>> ls = [1, 2, 3, 3, 5, 2, 1, 3, 6, 1]

>>> lst = list(set(ls))

>>> lst.sort(key=ls.index)

>>> lst

[1, 2, 3, 5, 6]

>>>

如果序列的值都是 hashable 类型,可以利用生成器解决去重后的顺序不变的问题。(Python Cookbook)

>>> def dedupe(items):

... seen = set()

... for item in items:

... if item not in seen:

... yield item

... seen.add(item)

...

>>>

>>> lst = [1, 2, 3, 3, 5, 2, 1, 3, 6, 1]

>>> list(dedupe(lst))

[1, 2, 3, 5, 6]

>>>

2、利用字典键不能重复的特性

>>> lst

[1, 2, 2, 3, 3, 5, 6, 7, 2, 1]

>>> list(dict.fromkeys(lst))

[1, 2, 3, 5, 6, 7]

>>>

3、利用for循环

>>> new_list = []

>>> for i in lst:

if i not in new_list:

new_list.append(i)

>>> new_list

[1, 2, 3, 5, 6, 7]

>>>

4、利用while循环

>>> def dup_rem(lst):

for i in lst:

while lst.count(i) > 1:

lst.remove(i)

return lst

>>>

>>> ls = [1, 2, 3, 3, 5, 2, 1, 3, 6, 1]

>>> dup_rem(ls)

[5, 2, 3, 6, 1]

5、使用itertools模块的grouby方法

>>> import itertools

>>> ls = [1, 2, 3, 3, 5, 2, 1, 3, 6, 1]

>>> ls.sort()

>>> lt = itertools.groupby(ls)

>>> lt # lt 是 itertools模块下的groupby对象,类似生成器

>>> list(lt)

[(1, ), (2, ),

(3, ),

(5, ), (6, )]

>>> for k, g in lt:

print(k, end=' ')

>>>

二、移除重复数据

通常来说,可以通过duplicated 方法返回一个布尔型 Series,每行中的布尔值表示该行是否是重复的。

从上面的结果可以看出,第1、4、6行不是第一次出现的数据行,在后面的去重工作中可以考虑去除。如果想要直接去除数据中的重复行,可以考虑使用 drop_duplicates 方法,它用于返回一个移除了重复行的 DataFrame。

上面的结果显示,重复的数据行已经被移除。当然,前面介绍的这两种方法默认会判断全部列。在实际的数据处理案例中,可能只希望根据某一列(例如k1列)来过滤重复项。

上面的方法中,通过 drop_duplicates(['k1'])可以将 k1中的重复值去掉。此外,duplicated 和 drop_duplicates还可以通过多列的联合取值来筛选数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值