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 |
ほとんどの列が同じ値
| 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 |



# 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
# すべての列で重複を取得
duplicates = height_weight.duplicated()
print(duplicates)
1 False
... ....
22 True
23 False
... ...
# 重複行を取得
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
.duplicated() メソッド
subset: 重複判定に使う列名のリスト。
keep: 重複のうちどれを残すか。先頭('first')、末尾('last')、すべて(False)。
# 重複判定に使う列
column_names = ['first_name','last_name','address']
duplicates = height_weight.duplicated(subset = column_names, keep = False)
# 重複値を出力
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
# 重複値を出力
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
# 重複値を出力
height_weight[duplicates].sort_values(by = 'first_name')

# 重複値を出力
height_weight[duplicates].sort_values(by = 'first_name')

# 重複値を出力
height_weight[duplicates].sort_values(by = 'first_name')

.drop_duplicates() メソッド
subset: 重複判定に使う列名のリスト。
keep: 残す重複。先頭('first')、末尾('last')、すべて(False)。
inplace: 新規オブジェクトを作らずに DataFrame 内で直接削除(True)。
# 重複を削除
height_weight.drop_duplicates(inplace = True)
# 重複値を出力
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
# 重複値を出力
column_names = ['first_name','last_name','address']
duplicates = height_weight.duplicated(subset = column_names, keep = False)
height_weight[duplicates].sort_values(by = 'first_name')

.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で学ぶデータクリーニング