Python【前処理】補習塾

【Excel操作のイメージでPandas前処理⑤】重複したデータの削除

Python【前処理】補習塾

重複したデータの除去の重要性

重複したデータはデータ分析において問題を引き起こす可能性があります。例えば、重複したデータがある場合、集計や統計処理の結果に歪みが生じる恐れがあります。また、大量の重複データがあるとデータベースの容量を無駄に占有してしまい、処理速度の低下やストレージの浪費といった問題も考えられます。したがって、重複データの除去は正確なデータ分析を行うために重要なステップとなります。

 

Pandasを使った重複データの除去方法

仮想的なデータを以下のように作成します。

import pandas as pd

# 仮想的なデータを作成
data = {
'ID': [1, 2, 3, 4, 5, 1, 6, 7, 8, 9],
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emma', 'Alice', 'Frank', 'Grace', 'Henry', 'Ivy'],
'Age': [25, 30, 22, 35, 28, 25, 40, 32, 27, 23]
}

df = pd.DataFrame(data)
print(df)
ID Name Age
0 1 Alice 25
1 2 Bob 30
2 3 Charlie 22
3 4 David 35
4 5 Emma 28
5 1 Alice 25
6 6 Frank 40
7 7 Grace 32
8 8 Henry 27
9 9 Ivy 23

データの中に重複したレコードがあるかどうかを確認します。Pandasの関数を使って、重複データを特定する方法を説明します。

# 重複データの確認
duplicates = df.duplicated()
print("重複データの確認:")
print(duplicates)

# 最初の出現以外の重複データを削除
df_cleaned = df.drop_duplicates()

# 重複データを削除した後のデータフレームを表示
print("重複データを削除した後:")
print(df_cleaned)
重複データの確認:
0 False
1 False
2 False
3 False
4 False
5 True
6 False
7 False
8 False
9 False
dtype: bool

重複データを削除した後:
ID Name Age
0 1 Alice 25
1 2 Bob 30
2 3 Charlie 22
3 4 David 35
4 5 Emma 28
6 6 Frank 40
7 7 Grace 32
8 8 Henry 27
9 9 Ivy 23

重複データが含まれていた行(インデックス番号5の行=Alice 25)が削除され、重複したデータが除去されたデータフレームが得られました。このように、Pandasのdrop_duplicates()関数を使うことで、簡単に重複したデータの除去ができます。

 

他の列の内容が異なっていても重複とみなして削除する方法

次に、「ある列の内容が同じなら削除する」という方法を説明します。

# 仮想的なデータを作成
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emma', 'Alice', 'Frank', 'Grace', 'Henry', 'Ivy'],
'Age': [25, 30, 22, 35, 28, 30, 40, 32, 27, 23]
}

df = pd.DataFrame(data)
print("元のデータフレーム:")
print(df)

# 重複データを削除
df_cleaned = df.drop_duplicates()

# 重複データを削除した後のデータフレームを表示
print("重複データを削除した後:")
print(df_cleaned)

出力結果:

元のデータフレーム:
Name Age
0 Alice 25
1 Bob 30
2 Charlie 22
3 David 35
4 Emma 28
5 Alice 30
6 Frank 40
7 Grace 32
8 Henry 27
9 Ivy 23
重複データを削除した後:
Name Age
0 Alice 25
1 Bob 30
2 Charlie 22
3 David 35
4 Emma 28
5 Alice 30
6 Frank 40
7 Grace 32
8 Henry 27
9 Ivy 23

drop_duplicates()を実行しても重複データ=Aliceが除去されることはありません。なぜならば、drop_duplicates()はデフォルトではすべての列を比較して重複行を削除するためです。

問答無用で「Alice」の重複を除去するには、次のようにします。

# 重複しているNameがAliceの行を除去
df_cleaned = df.drop_duplicates(subset='Name')

この場合、「Alice 25」が残り、その後登場する「Alice 30」が削除されます。

 

もし、「A列~Z列があるとき、A列とB列が同じなら重複削除」としたい場合は

df.drop_duplicates(subset=['A', 'B'])

と、subset= のあとにリストを入れることで実現します。

 

現場で使える!pandasデータ前処理入門 機械学習・データサイエンスで役立つ前処理手法 [ 株式会社ロンバート ]

価格:4,180円
(2023/8/6 08:35時点)
感想(1件)

pandasライブラリ活用入門 Pythonデータ分析/機械学習のための基本コーデ (impress top gear) [ ダニエル・Y・チェン ]

価格:4,180円
(2023/8/6 08:36時点)
感想(0件)

コメント

タイトルとURLをコピーしました