去重,即删除重复的数据。在日常开发中,我们对数据分析处理时,删除重复数据是经常会遇到的一个问题。通过数据去重,不仅可以节省内存空间,提高写入性能,还可以提升数据集的精确度,使得数据集不受重复数据的影响。
Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。
Pandas 的主要数据结构是 Series(一维数据)与 DataFrame(二维数据)。
pandas.DataFrame.drop_duplicates()是对对DataFrame(二维)的数据,去除特定列下面的重复行。
返回删除重复行的 DataFrame。 考虑某些列是可选的。索引(包括时间索引)将被忽略。
subset
:列标签或标签序列,可选参数。
仅考虑某些列(要去重的列名)来识别重复项,默认情况下使用所有列(默认为None
)
keep
:有三个可选参数,{'first', 'last', False}
,默认为 'first'
确定要保留哪些重复项(如果有)。
first
:删除除第一次出现的重复项。last
:删除除最后一次出现的重复项。 False
:删除所有重复项。inplace
:布尔值参数,默认为 False
,表示删除重复项后返回一个副本,若为 Ture 则表示直接在原数据上删除重复项。
返回表示重复行的布尔系列。
考虑某些列是可选的。
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
是处理数据的理想工具。
以上是我个人在学习过程中的记录所学,希望对正在一起学习的小伙伴有所帮助!!!
如果对你有帮助,希望你能一键三连【关注、点赞、收藏】!!!