Python小技巧--pandas多样化去重【实践】

去重概念

去重,即删除重复的数据。在日常开发中,我们对数据分析处理时,删除重复数据是经常会遇到的一个问题。通过数据去重,不仅可以节省内存空间,提高写入性能,还可以提升数据集的精确度,使得数据集不受重复数据的影响。

Pandas简介

Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。

Pandas 的主要数据结构是 Series(一维数据)与 DataFrame(二维数据)。


Pandas去重方法介绍

pandas.DataFrame.drop_duplicates()

pandas.DataFrame.drop_duplicates()是对对DataFrame(二维)的数据,去除特定列下面的重复行。

返回删除重复行的 DataFrame。 考虑某些列是可选的。索引(包括时间索引)将被忽略。

参数说明

  • subset:列标签或标签序列,可选参数。
    仅考虑某些列(要去重的列名)来识别重复项,默认情况下使用所有列(默认为None

  • keep:有三个可选参数,{'first', 'last', False},默认为 'first'

    确定要保留哪些重复项(如果有)。

    • first:删除除第一次出现的重复项。
    • last:删除除最后一次出现的重复项。
    • False:删除所有重复项。
  • inplace:布尔值参数,默认为 False ,表示删除重复项后返回一个副本,若为 Ture 则表示直接在原数据上删除重复项。


pandas.DataFrame.duplicated()

返回表示重复行的布尔系列。

考虑某些列是可选的。

参数说明

  • subset:列标签或标签序列,可选参数。
    仅考虑某些列(要去重的列名)来识别重复项,默认情况下使用所有列(默认为None
  • keep:有三个可选参数,{'first', 'last', False},默认为 'first'确定要保留哪些重复项(如果有)。
    • first:删除除第一次出现的重复项。
    • last:删除除最后一次出现的重复项。
    • False:删除所有重复项。

返回行的布尔值Series[bool]

实践

import pandas as pd

df = pd.DataFrame(
    {'A': ['Dan', 'Matt', 'Annie', 'Jeff', 'Jeff', 'Yum Yum', 'Yum Yum', 'Indomie', 'Indomie', 'Indomie'],
     'B': ['Annie', 'Elsa', 'Dan', 'John', 'John', 'cup', 'cup', 'cup', 'pack', 'pack'],
     'C': ['x', 'y', 'x', 'c', 'c', 'q', 'q', 3.5, 15, 5]}
)

# 默认保留第一次出现的重复项
print(df)
# 返回值的类型为DataFrame
print(type(df))
         A      B    C
0      Dan  Annie    x
1     Matt   Elsa    y
2    Annie    Dan    x
3     Jeff   John    c
4     Jeff   John    c
5  Yum Yum    cup    q
6  Yum Yum    cup    q
7  Indomie    cup  3.5
8  Indomie   pack   15
9  Indomie   pack    5


默认去重

默认情况下,它会根据所有列删除重复的行。默认保留第一次出现的重复值

df = df.drop_duplicates()
print(df)
         A      B    C
0      Dan  Annie    x
1     Matt   Elsa    y
2    Annie    Dan    x
3     Jeff   John    c
5  Yum Yum    cup    q
7  Indomie    cup  3.5
8  Indomie   pack   15
9  Indomie   pack    5

特定列去重

要删除特定列上的重复项,用“subset”。

df = df.drop_duplicates(subset=['A'])
print(df)
         A      B    C
0      Dan  Annie    x
1     Matt   Elsa    y
2    Annie    Dan    x
3     Jeff   John    c
5  Yum Yum    cup    q
7  Indomie    cup  3.5

要删除重复项并保留最后一次last出现,请使用“keep”。

         A      B    C
0      Dan  Annie    x
1     Matt   Elsa    y
2    Annie    Dan    x
4     Jeff   John    c
6  Yum Yum    cup    q
7  Indomie    cup  3.5
9  Indomie   pack    5

多列去重,保留最后出现值

从上述示例可以看出,删除重复项后,行标签使用的数字是原来的,并没有从 0 重新开始,那么我们应该怎么从 0 重置索引呢?Pandas 提供的 reset_index() 函数会直接使用重置后的索引。

df = df.drop_duplicates(subset=['A', 'B'], keep='last')
print(df)
#重置索引,从0重新开始
df = df.reset_index(drop=True)
print(df)
         A      B    C
0      Dan  Annie    x
1     Matt   Elsa    y
2    Annie    Dan    x
3     Jeff   John    c
4  Yum Yum    cup    q
5  Indomie    cup  3.5
6  Indomie   pack    5
df = df.duplicated()
print(df)
0    False
1    False
2    False
3    False
4     True
5    False
6     True
7    False
8    False
9    False
dtype: bool

列互换去重

但是细心的小伙伴会发现,用pandas的初步去重之后,只是对列上的重复行值进行了去重,但是对两列的值互换之后,剩余的列值不变的情况下,并不能进行很好的去重,如第0行['Dan', 'Annie', 'x']和第2行[ 'Annie', 'Dan', 'x']的数值是一样的。

df = df[~df[['A', 'B', 'C']].apply(frozenset, axis=1).duplicated()]
print(df)

df = df.reset_index(drop=True)
print(df)
         A      B    C
0      Dan  Annie    x
1     Matt   Elsa    y
3     Jeff   John    c
5  Yum Yum    cup    q
7  Indomie    cup  3.5
8  Indomie   pack   15
9  Indomie   pack    5
         A      B    C
0      Dan  Annie    x
1     Matt   Elsa    y
2     Jeff   John    c
3  Yum Yum    cup    q
4  Indomie    cup  3.5
5  Indomie   pack   15
6  Indomie   pack    5

总结

处理数据一般分为几个阶段:数据整理与清洗、数据分析与建模、数据可视化与制表,Pandas 是处理数据的理想工具。
以上是我个人在学习过程中的记录所学,希望对正在一起学习的小伙伴有所帮助!!!
如果对你有帮助,希望你能一键三连【关注、点赞、收藏】!!!

你可能感兴趣的:(Python小技巧,NLP,pandas,python,数据分析,nlp)