数据集中的重复值包括以下两种情况:
- 数据值完全相同的多条数据记录;
- 数据主体相同但匹配到的唯一属性值不同。
示例如下:
# 导入pandas库
import pandas as pd
# 生成重复数据,data1和data3完全相同
data1 = ['a', 3]
data2 = ['b', 2]
data3 = ['a', 3]
data4 = ['c', 2]
df = pd.DataFrame([data1, data2, data3, data4], columns=['col1', 'col2'])
print(df)
查看重复数据:
#df.duplicated()方法中有两个参数subset和keep。
#subset:要判断是否重复的列。可以指定某个列或多个列。默认使用全部列。
#keep:表示重复时不标记为True的规则。可指定为first(除第一个重复值外均标记为True)、last(除最后一个重复值外均标记为True)和False(重复值全部标记为True)。默认使用first。
print(df.duplicated()) # 默认使用全部列,除第一个重复值外均标记为True
print(df.duplicated(keep='last')) # 默认使用全部列,除最后一个重复值外均标记为True
print(df.duplicated(keep=False)) # 默认使用全部列,重复值全部标记为True
print(df.duplicated(['col2'])) # 默认使用col2列,除第一个重复值外均标记为True
print(df.duplicated(['col1', 'col2'])) # 默认使用col1和col2列,除第一个重复值外均标记为True
去重处理
去重是重复值处理的主要方法,只保留唯一数据记录。
去重处理:
#df.drop_duplicates() 中参数subset和keep用法和df.duplicated()一致
print(df.drop_duplicates()) # 判断所有列值重复的记录,保留重复的第一个值
print(df.drop_duplicates(keep='last')) # 判断所有列值重复的记录,保留重复的最后一个值
print(df.drop_duplicates(keep=False)) # 判断所有列值重复的记录,删除所有重复的值
print(df.drop_duplicates(['col2'])) # 判断col2列值重复的记录,保留重复的第一个值
print(df.drop_duplicates(['col1', 'col2'])) # 判断col1、col2列值重复的记录,保留重复的第一个值
以下任意一种场景都不宜直接去重:
- 重复的记录用于分析演变规律。通过重复的记录可以知道数据的演变情况。
- 重复的记录用于样本不均衡处理。在样本不均衡的分类问题中,可能会采用随机过采样方法简单复制少样本的数据,就会导致重复的记录。
- 重复的记录用于检测业务规则问题。重复数据可能意味着重大运营规则问题,尤其当这些重复值出现在业务场景中,例如:重复的订单、重复的充值、重复的预约项、重复的出库申请等。
注意:除了Pandas可用来做重复值识别和处理外,也可以使用Numpy中的unique()方法,该方法返回其参数数组中所有不同的值,也可以使用Python自带的内置函数set方法,该方法返回唯一元素的集合。
参考资料:《Python数据分析与数据化运营》宋天龙
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)