【Python】重複を削除する方法を初心者向けに解説

はじめに

みなさんは、データを扱うときに重複した値が紛れ込んでしまうことはないでしょうか。
Pythonでリストやテーブル状のデータを処理する際、「重複を削除する方法」はとても役立つテクニックです。

実務では、大量のデータをまとめたり分析したりするときに重複が存在すると、思わぬエラーが起きたり正確な結果が得られなかったりすることがあります。
そこで本記事では、Python 重複 削除をテーマに、初心者向けにわかりやすく解説していきます。

この記事を読むとわかること

  • 重複が発生する理由と実務での問題点
  • Pythonで重複を削除するための基本的なアプローチ
  • setdict.fromkeys() を使った具体的なコード例
  • 2次元リストやpandasを利用したデータ分析の現場での応用
  • 実務で役立つポイントと注意点

重複削除の基本概念

データにおける重複とは、同じ値や同じ行が複数回含まれている状態を指します。
単純に見えるかもしれませんが、意外と厄介なエラーの原因になりやすいです。

たとえばリストに同じ項目が混在していると、ループ処理で同じ値を何度も扱ってしまい、余計な処理が増えてしまいます。
また、まとめたデータを集計するときに重複が含まれていると、結果が二重にカウントされて誤った結論を導くこともあるでしょう。
重複を削除することで、メモリや処理時間の節約になるだけでなく、正確な分析に近づきやすくなります。

Pythonで重複を削除する方法

Pythonではさまざまな方法で重複削除が可能です。
ここでは代表的な3つの方法を紹介します。
「リストから要素を除外する」というシンプルな例を中心に見てみましょう。

setを使う

setは重複を自動的に排除する特性があるため、リストから重複を削除する基本的な方法としてよく利用されます。
リストを一度set型に変換し、再びリスト型に戻すだけで重複が除去されます。
ただし、元の要素の順序は保証されません。

コード例

my_list = [1, 2, 2, 3, 3, 3]
unique_list = list(set(my_list))
print(unique_list)  # [1, 2, 3] といった要素が表示される

この方法は特に、順序を気にしなくても良い場合に便利です。
重複を効率的に取り除きたい場面ではよく使われます。

dict.fromkeys()を使う

Pythonの辞書にはキーが重複しないという仕組みがあります。
dict.fromkeys()を使うと、要素をキーとして持つ辞書を一時的に作り、その後キーを列挙することで重複が除去されたリストを得る方法です。
setと異なり、こちらは元のリストの順序が保持される点が特徴です。

コード例

my_list = ["apple", "banana", "apple", "cherry"]
unique_list = list(dict.fromkeys(my_list))
print(unique_list)  # ['apple', 'banana', 'cherry']

この方法は順序を維持したいときによく使われます。
たとえば、ユーザーが入力した文字列リストから重複を削除しつつ、入力順をそのままにしたい場合などに役立ちます。

リスト内包表記を使う

もう一つの方法として、リスト内包表記とセットを組み合わせるやり方があります。
要素を確認しながらセットに登録していき、初めて見つけた要素だけを残す形です。
少しコード量は増えますが、細かい制御が行いやすいメリットがあります。

コード例

files = ["data.csv", "report.docx", "summary.csv", "data.csv"]
seen = set()
unique_files = [f for f in files if not (f in seen or seen.add(f))]
print(unique_files)  # ['data.csv', 'report.docx', 'summary.csv']

このコードでは、seen というセットに要素がなければ追加し、すでに存在する場合はスキップしています。
こうした仕組みによって、リストの順序を保ちながら重複を削除しています。

2次元リストの重複削除

リストの中にタプルやリストが入った「2次元リスト」の場合にも、重複削除は同じ原則で考えることができます。
ただし、タプルであればset型に変換できますが、要素がリストの場合はそのままではsetのキーとして使えません。
タプルに変換するなどの工夫が必要です。

重複判定の考え方

2次元リストでは、「全く同じ組み合わせであるかどうか」を判定したいケースが多いです。
例えば(1, "apple")と(1, "apple")は同じですが、(2, "apple")は別データとして扱いたいことがあります。
この判定基準が明確ならば、setを使うか、リスト内包表記と合わせて工夫すれば対応できます。

コード例

data = [
    (1, "apple"),
    (2, "banana"),
    (1, "apple"),
    (3, "banana")
]

unique_data = list(set(data))
print(unique_data)

上記の例では、タプルを含むリストなので、setに変換して重複を除外しています。
もしリストが要素として入っている場合は、事前にタプルに変換するか、ほかの方法を検討しましょう。

データ分析の現場で役立つ重複削除

データ分析のために、CSVやExcelファイルをPythonで取り込んで処理するケースは多いです。
大量の行を扱うとき、重複があると分析結果に影響が出たり、メモリを無駄に消費してしまったりします。
ここではDataFrameを扱う方法として、pandasライブラリの機能を簡単に紹介します。

pandasを使う例

pandasには drop_duplicates() という便利なメソッドがあります。
例えばCSVファイルを読み込み、重複した行をまとめて除去するようなケースでよく使われます。

コード例

import pandas as pd

df = pd.DataFrame({
    "id": [1, 2, 2, 3, 3],
    "value": ["apple", "banana", "banana", "apple", "apple"]
})

df_unique = df.drop_duplicates()
print(df_unique)

このように一度DataFrameに変換してしまえば、1行のメソッド呼び出しで重複削除ができます。
分析やレポート作成の際に非常に便利です。

実務でよくある活用シーン

重複削除は、実務のあちこちで求められる操作です。
例えば複数のExcelファイルをまとめてリスト化する際や、ログデータを統合した後の分析などで活躍するでしょう。

CSV統合

いくつものCSVファイルを一括で処理する際、同じ行が重複していることがよくあります。
これらをセットやpandasなどで取り除くことで、誤った集計を防ぎます。

ログ解析

大規模なログを集計する場合、重複行を削除するだけでデータ量がかなり削減されます。
扱うデータ量が減るため、後続の分析や可視化をスムーズに行うことができます。

ユーザー管理

システム上でユーザー情報の重複があると、メール通知や報告書などが二重発行される可能性があります。
そのようなトラブルを未然に防ぐために重複削除は有効です。

多くのデータを集約する場合、重複の定義が曖昧だと意図しないレコードを消してしまう恐れがあります。
必要に応じて、重複削除の基準をしっかり決めましょう。

まとめ

ここまで、Python 重複 削除をテーマに代表的な方法を中心に解説してきました。
リストを使った基本的な重複削除から、実務で活用しやすい2次元リストやpandasによる方法まで幅広く紹介しました。

実際の現場では、データの規模や「どの値を基準に重複とみなすか」によって使い分けることが多いです。
順序を維持する必要があるのか、速度重視なのか、あるいはDataFrameのような形式のデータなのかによって最適な方法が変わります。

みなさんの目的や環境に応じてベストなやり方を選び、快適なデータ処理を実現してみてください。

Pythonをマスターしよう

この記事で学んだPythonの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。