pandas 数据分析:重复与去重

重复与去重


使用 pandas 解决数据的重复与去重问题。


数据重复

Index 对象

duplicated() 判断重复接口

语法IndexObj.duplicated(keep="first"),返回布尔值组成的 array

  • keep 参数:
    • 字符串 first:默认值,第一次出现不标记。
    • 字符串 last:最后一次出现不标记。
    • 布尔值 False:重复的数据都标记上。
idx = pd.Index(['X', 'Y', 'X', 'Z', 'X'])
idx.duplicated()
# result bellow
array([False, False,  True, False,  True])
is_unique / has_duplicates 属性
  1. IndexObj.is_unique: True if Index 中没有重复项。
  2. IndexObj.has_duplicates: True if Index 中有重复项。

Series 对象

duplicated() 判断重复接口

语法SeriesObj.duplicated(keep="first"),返回布尔值组成的 Series

  • keep 参数:
    • 字符串 first:默认值,第一次出现不标记。
    • 字符串 last:最后一次出现不标记。
    • 布尔值 False:重复的数据都标记上。
ps = pd.Series(['X', 'Y', 'X', 'Z', 'X'], )
ps.duplicated(keep='last')
# result bellow
0     True
1    False
2     True
3    False
4    False
dtype: bool
is_unique 属性
  1. SeriesObj.is_unique: Return True 如果值没有重复项。

DataFrame 对象

duplicated() 判断重复接口

语法DataFrameObj.duplicated(subset=None, keep="first"),返回布尔值组成的 Series

  • subset 参数:只有 Dataframe 可以使用的参数,用来选择判断重复的指标;默认值为 None 表示一行的所有值都相同才算重复;该参数可指定只要某些列相同就是重复。
  • keep 参数:
    • 字符串 first:默认值,第一次出现不标记。
    • 字符串 last:最后一次出现不标记。
    • 布尔值 False:重复的数据都标记上。
df = pd.DataFrame({
    '甲': ['X', 'X', 'Y', 'Y', 'Y'],
    '乙': ['a', 'a', 'a', 'b', 'b'],
    '丙': [1, 1, 2, 3, 5]
})
df.duplicated(subset="甲")
# result bellow
0    False
1     True
2    False
3     True
4     True
dtype: bool	


数据去重

Index 对象

drop_duplicates() 删除重复项的接口

语法IndexObj.drop_duplicates(可选参数),返回去重后的 新obj,不修改 原obj

  • keep 参数:
    • 字符串 first:默认值,保留第一次出现的;
    • 字符串 last:保留最后一次出现的;
    • 布尔值 False:重复项全部删除,不保留。
idx = pd.Index(['X', 'Y', 'X', 'Z', 'X', 'W'])
idx2 = idx.drop_duplicates(keep="last")
idx2
# result bellow
Index(['Y', 'Z', 'X', 'W'], dtype='object')
unique() 接口

语法IndexObj.unique(level=None),Only return values from specified level (for MultiIndex). If int, gets the level by integer position, else by level name. 简单来说,返回指定级别的去重后索引值(新的 Index 对象)。

  • level 参数:
    • int,整型数据;
    • hashable,可哈希数据,None 是可哈希的且为默认值。
idx2 = pd.Index([("A", "a"), ("A", "b"), ("B", "a"), ("B", "b")])
idx2.unique(level=1)
# result bellow
Index(['a', 'b'], dtype='object')
nunique() 接口

语法IndexObj.nunique(dropna=True),去重后索引值的数目。

  • dropna 参数:
    • 布尔值 True:默认值,NaN 不记录在内;
    • 布尔值 FalseNaN 记录在内。
idx = pd.Index(list("甲乙丙丁戊甲乙丙"))
idx.nunique()
# result bellow
5

Series 对象

drop_duplicates() 删除重复项的接口

语法SerriesObj.drop_duplicates(可选参数),可通过参数设置是否返回去重后的 新obj,还是修改 原obj

  • keep 参数:
    • 字符串 first:默认值,保留第一次出现的;
    • 字符串 last:保留最后一次出现的;
    • 布尔值 False:重复项全部删除,不保留。
  • inplace 参数:
    • 布尔值 False:默认值,新建数据构型操作并返回。
    • 布尔值 True原地操作,返回空值。
  • ignore_index 参数:
    • 布尔值 False:默认值,结果的 axis 保持。
    • 布尔值 True:结果的 axis 将重置为< 0, 1, …, n - 1>。
s = pd.Series(['A', 'B', 'A', 'C', 'A', 'D'], index=list("甲乙丙丁戊己"), name="dr")
s.drop_duplicates(ignore_index=True)  # 设置index重置
s
# result bellow
0    A
1    B
2    C
3    D
Name: dr, dtype: object
unique() 接口

语法SeriesObj.unique() ,Return unique values of Series object. 根据数据类型返回指定的 Numpy Array,如 arrayDateArray

pd.Series([pd.Timestamp('2016-01-01') for _ in range(3)]).unique()
# result bellow
<DatetimeArray>
['2023-07-15 00:00:00']
Length: 1, dtype: datetime64[ns]
nunique() 接口

语法SeriesObj.nunique(dropna=True),去重后值的数目。

  • dropna 参数:
    • 布尔值 True:默认值,NaN 不记录在内;
    • 布尔值 FalseNaN 记录在内。
idx = pd.Series(list("甲乙丙丁戊甲乙丙"))
idx.nunique()
# result bellow
5

DataFrame 对象

drop_duplicates() 删除重复项的接口

语法DataFrameObj.drop_duplicates(可选参数),可通过参数设置是否返回去重后的 新obj,还是修改 原obj

  • subset 参数,选择判断重复的指标,默认一行的全部列相同才是重复:
    • column label;
    • sequence of labels。
  • keep 参数:
    • 字符串 first:默认值,保留第一次出现的;
    • 字符串 last:保留最后一次出现的;
    • 布尔值 False:重复项全部删除,不保留。
  • inplace 参数:
    • 布尔值 False:新建数据构型操作并返回。
    • 布尔值 True原地操作,返回空值。
  • ignore_index 参数:
    • 布尔值 False:结果的 axis 保持。
    • 布尔值 True:结果的 axis 将重置为< 0, 1, …, n - 1>。
df = pd.DataFrame({
    '甲': ['X', 'X', 'Y', 'Y', 'Y'],
    '乙': ['a', 'a', 'a', 'b', 'b'],
    '丙': [1, 1, 2, 3, 5]
})
df.drop_duplicates(subset="甲", ignore_index=True)
# result bellow
	甲	乙	丙
0	X	a	1
1	Y	a	2
nunique() 接口

语法DataFrame.nunique(axis=0, dropna=True) ,Count number of distinct elements in specified axis. 计算指定坐标方向下的值,去重后数目,返回一个 Series

  • axis 参数:
    • 整数 0:默认值,index,行坐标方向;
    • 整数 1columns,列坐标方向。
  • dropna 参数:
    • 布尔值 True:默认值,NaN 不记录在内;
    • 布尔值 FalseNaN 记录在内;
df = pd.DataFrame({'A': [4, 5, 6], 'B': [4, 1, 1]})
df.nunique()
df.nunique(axi=1)
# result bellow 1
A    3
B    2
dtype: int64
# result bellow 2
0    1
1    2
2    2
dtype: int64

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值