Pythonでcsvファイルから重複な行を削除する(pandas DataFrame版)

ノウハウ
スポンサーリンク

 

 

csvファイルを扱うことができるPythonライブラリであるpandasを使って、csvファイルから重複な行を削除する方法を備忘録として残しておきます。

 

目次

 

 

サンプルのcsvファイル

使い方をまとめる上で、以下の「duplicated_sample .csv」という名称のcsvファイルをCドライブ直下に格納したことを想定します。

 

  • ID=1のデータが完全に重複しています(2行目と3行目)
  • ID=2とID=3のデータは行で見れば重複していないが、[「物」&&「お店」]では重複しています

 

 

 

 

csvファイルから重複な行を削除する(DataFrame版)

 

【サンプルコード】

##### 【csvファイルから重複な行を削除する(DataFrame版)】 #####
import pandas
# csvファイルのロード
csvfile_path='C:/duplicated_sample.csv'
dataframe = pandas.read_csv(filepath_or_buffer=csvfile_path,encoding="cp932")

# 行全体で重複チェック
print('===== 重複チェック =====')
print(f'行全体で重複チェック: {dataframe.duplicated().any()}')

# 「物」、「お店」で重複チェック(同じお店で同じものを買ったかどうか?)
print(f'「物」、「お店」で重複チェック: {dataframe.duplicated(["物", "お店"]).any()}')

# 行全体で重複しないユニークなDataFrameを取り出し
print('===== 行全体で重複しないユニークなDataFrameを取り出し =====')
print(dataframe.drop_duplicates())

# 「物」、「お店」で重複しないユニークなDataFrameを取り出し
print('===== 「物」、「お店」で重複しないユニークなDataFrameを取り出し =====')
print(dataframe.drop_duplicates(["物", "お店"]))

 

【実行結果】

===== 重複チェック =====
行全体で重複チェック: True
「物」、「お店」で重複チェック: True
===== 行全体で重複しないユニークなDataFrameを取り出し =====
   ID    物   価格     お店       購入日
0   1  いちご  250   ●×商店  2019/1/1
2   2  リンゴ  100   ●×商店  2019/1/2
3   3  リンゴ  100   ●×商店  2019/1/3
4   4  みかん   50    △△店  2019/1/3
5   5    桃  200  ××ストア  2019/1/4
===== 「物」、「お店」で重複しないユニークなDataFrameを取り出し =====
   ID    物   価格     お店       購入日
0   1  いちご  250   ●×商店  2019/1/1
2   2  リンゴ  100   ●×商店  2019/1/2
4   4  みかん   50    △△店  2019/1/3
5   5    桃  200  ××ストア  2019/1/4

 

【説明】

  • dataframe = pandas.read_csv(filepath_or_buffer=csvfile_path,encoding="cp932")で「duplicated_sample .csv」から有効なデータのみをDataFrameオブジェクトとして取得しています。
  • 重複チェックについて
    • pandasのDataFrameオブジェクトのduplicated()を使うことで、重複した行を抽出することができます。そこにさらに.any()を実行することで重複有無をチェックしています。
    • 【実行結果】は、ID=1のデータが重複しているので、『行全体で重複チェック 』 はTrueになります。
    • さらに、duplicated(["A","B"])とすることで、カラム名を指定して重複のチェックをすることができます。
    • 【実行結果】は、ID=2とID=3のデータが[「物」&&「お店」]で重複しているので、『「物」、「お店」で重複チェック』もTrueになります。※そもそもID=1で重複していますが、、、
    • pandasのDataFrameオブジェクトのduplicated()の詳細については本家のAPI仕様書である<pandas.DataFrame.duplicated>を参照してください。
  • 行全体で重複しないユニークなDataFrameを取り出しについて
    • pandasのDataFrameオブジェクトのdrop_duplicates()を使うことで、重複した行を削除することができます。
    • 【実行結果】は、ID=1のデータ重複をなくしてDataFrameオブジェクトが取得できています。
    • pandasのDataFrameオブジェクトのdrop_duplicates()の詳細については本家のAPI仕様書である<pandas.DataFrame.drop_duplicates>を参照してください。
  • 「物」、「お店」で重複しないユニークなDataFrameを取り出しについて
    • pandasのDataFrameオブジェクトのdrop_duplicates()に対して、drop_duplicates([ "A","B" ])とすることで、カラム名を指定して重複した行を削除することができます。
    • 【実行結果】は、ID=1の重複以外に、ID=2とID=3は[「物」&&「お店」]では重複しているため、後発のID=3が重複と判定され、削除することができています。

 

 

 

 

関連情報

 

【pandasライブラリのまとめ】

 

【Pythonライブラリのまとめ】

 

 

 

 

 

以上!

コメント

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