唯一性约束

Python 数据清洗

Adel Nehme

VP of AI Curriculum, DataCamp

什么是重复值?

所有列的值都相同

first_name last_name address height weight
Justin Saddlemyer Boulevard du Jardin Botanique 3, Bruxelles 193 cm 87 kg
Justin Saddlemyer Boulevard du Jardin Botanique 3, Bruxelles 193 cm 87 kg
Python 数据清洗

什么是重复值?

大部分列的值相同

first_name last_name address height weight
Justin Saddlemyer Boulevard du Jardin Botanique 3, Bruxelles 193 cm 87 kg
Justin Saddlemyer Boulevard du Jardin Botanique 3, Bruxelles 194 cm 87 kg
Python 数据清洗

为何会出现?

duplicate_1

Python 数据清洗

为何会出现?

duplicate_2

Python 数据清洗

为何会出现?

duplicate_3

Python 数据清洗

如何查找重复值?

# Print the header
height_weight.head()
  first_name last_name                       address  height  weight
0       Lane     Reese              534-1559 Nam St.     181      64
1       Ivor    Pierce             102-3364 Non Road     168      66
2      Roary    Gibson   P.O. Box 344, 7785 Nisi Ave     191      99
3    Shannon    Little  691-2550 Consectetuer Street     185      65
4      Abdul       Fry                4565 Risus St.     169      65
Python 数据清洗

如何查找重复值?

# Get duplicates across all columns
duplicates = height_weight.duplicated()
print(duplicates)
1       False
...     ....
22      True
23      False
...     ...
Python 数据清洗

如何查找重复值?

# Get duplicate rows
duplicates = height_weight.duplicated()
height_weight[duplicates]
    first_name last_name                               address  height  weight
100       Mary     Colon                           4674 Ut Rd.     179      75
101       Ivor    Pierce                     102-3364 Non Road     168      88
102       Cole    Palmer                       8366 At, Street     178      91
103    Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     196      83
Python 数据清洗

如何查找重复行?

.duplicated() 方法

subset:要检查是否重复的列名列表。

keep:保留重复项的哪一个:第一个'first')、最后一个'last')或全部False)。

# 要检查是否重复的列
column_names = ['first_name','last_name','address']
duplicates = height_weight.duplicated(subset = column_names, keep = False)
Python 数据清洗

如何查找重复行?

# Output duplicate values
height_weight[duplicates]
    first_name last_name                               address  height  weight
1         Ivor    Pierce                     102-3364 Non Road     168      66
22        Cole    Palmer                       8366 At, Street     178      91
28     Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     195      83
37        Mary     Colon                           4674 Ut Rd.     179      75
100       Mary     Colon                           4674 Ut Rd.     179      75
101       Ivor    Pierce                     102-3364 Non Road     168      88
102       Cole    Palmer                       8366 At, Street     178      91
103    Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     196      83
Python 数据清洗

如何查找重复行?

# Output duplicate values
height_weight[duplicates].sort_values(by = 'first_name')
    first_name last_name                               address  height  weight
22        Cole    Palmer                       8366 At, Street     178      91
102       Cole    Palmer                       8366 At, Street     178      91
28     Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     195      83
103    Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     196      83
1         Ivor    Pierce                     102-3364 Non Road     168      66
101       Ivor    Pierce                     102-3364 Non Road     168      88
37        Mary     Colon                           4674 Ut Rd.     179      75
100       Mary     Colon                           4674 Ut Rd.     179      75
Python 数据清洗

如何查找重复行?

# Output duplicate values
height_weight[duplicates].sort_values(by = 'first_name')

按 first_name 排序的完整重复

Python 数据清洗

如何查找重复行?

# Output duplicate values
height_weight[duplicates].sort_values(by = 'first_name')

按 first_name 排序的部分重复

Python 数据清洗

如何处理重复值?

# Output duplicate values
height_weight[duplicates].sort_values(by = 'first_name')

按 first_name 排序的完整重复

Python 数据清洗

如何处理重复值?

.drop_duplicates() 方法

subset:要检查是否重复的列名列表。

keep:保留重复项的哪一个:第一个'first')、最后一个'last')或全部False)。

inplace:是否在原 DataFrame 中直接删除重复行(True)。

# 删除重复
height_weight.drop_duplicates(inplace = True)
Python 数据清洗

如何处理重复值?

# Output duplicate values
column_names = ['first_name','last_name','address']
duplicates = height_weight.duplicated(subset = column_names, keep = False)
height_weight[duplicates].sort_values(by = 'first_name')
    first_name last_name                               address  height  weight
28     Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     195      83
103    Desirae   Shannon  P.O. Box 643, 5251 Consectetuer, Rd.     196      83
1         Ivor    Pierce                     102-3364 Non Road     168      66
101       Ivor    Pierce                     102-3364 Non Road     168      88
Python 数据清洗

如何处理重复值?

# Output duplicate values
column_names = ['first_name','last_name','address']
duplicates = height_weight.duplicated(subset = column_names, keep = False)
height_weight[duplicates].sort_values(by = 'first_name')

重复聚合示例

Python 数据清洗

如何处理重复值?

.groupby().agg() 方法

# 按列分组并汇总统计
column_names = ['first_name','last_name','address']
summaries = {'height': 'max', 'weight': 'mean'}
height_weight = height_weight.groupby(by = column_names).agg(summaries).reset_index()

# 确认聚合已完成 duplicates = height_weight.duplicated(subset = column_names, keep = False) height_weight[duplicates].sort_values(by = 'first_name')
first_name    last_name    address    height    weight

Python 数据清洗

Ayo berlatih!

Python 数据清洗

Preparing Video For Download...