LoginSignup
4
4

More than 5 years have passed since last update.

Pythonの辞書機能だけでcsvからユニークデータ抽出してみた。

Posted at

データ準備

こんなcsvがあるとする
※フィクション。類似名で実際に存在するキャラクターとは一切関係ない。

cat profile.csv

No, 作品, 作品_出典元, 名前, 名前_種類, 年齢
1, 崖の上のxニョ, xブリ, ぽにょ, 魚, 16
2, Frozxn, Disnxy, えるざ,雪女,20
3, リラッxマ, サンxックス, こぐまちゃん,熊,3
4, こげxん, Sanxio, こげぱん,パン,0.1
5, 名x偵コナン, サンデー, こなん,人間,17
6, カピバxさん, Trtworxs, ほわいとさん,カピバラ,3
7, xウルと動く城,xブリ, はうる,魔法使い,100
8, リラッxマ, サxxックス, こぐまちゃん,熊,5
9, アナ雪, Disnxy, えるーざ,雪女,20

やりたいこと

被っているデータを消したデータをcsv出力したい。
No.3とNo.8、No.2とNo.9が被っていそうだが、法則性なく微妙に揺れている。

辞書作成 step1

  • 作品名と名前の辞書aを作成する
a = dict()
with open('profile.csv', 'r') as pfile:
    for line in pfile:
        arr = line[:-1]
        title = arr[1]
        name = arr[3]

        a[title, name] = arr

aをこのまま出力するとこんな感じ、

No, 作品, 作品_出典元, 名前, 名前_種類, 年齢
1,崖の上のxニョ,xブリ,ぽにょ,魚,16
2,Frozxn,Disnxy,えるざ,雪女,20
8,リラッxマ,サxxックス,こぐまちゃん,熊,5
4,こげxん, Sanxio,こげぱん,パン,0.1
5,名x偵コナン,サンデー,こなん,人間,17
6,カピバxさん,Trtworxs,ほわいとさん,カピバラ,3
7,xウルと動く城,xブリ,はうる,魔法使い,100
9,アナ雪,Disnxy,えるーざ,雪女,20

No.3とNo.8の重複は消せたがNo.2とNo.9のはまだ残っている。

辞書作成 step2

  • 辞書aのキーを変えて出典元、種類、年齢をキーとした辞書を作成する。
b = dict()
for arr in a.values():
    presented = arr[2]
    name_category = arr[4]
    age = arr[5] 
    b[presented, name_category, age] = arr

これでNo.2とNo.9の重複も消せた。
あとはbをファイル出力するだけ。

import csv
with open('result.csv', 'w') as rfile:
    writer = csv.writer(rfile, lineterminator='\n')
    writer.writerows(b.values())

結果はこちら

No, 作品, 作品_出典元, 名前, 名前_種類, 年齢
1,崖の上のxニョ,xブリ,ぽにょ,魚,16
9,アナ雪,Disnxy,えるーざ,雪女,20
8,リラッxマ,サxxックス,こぐまちゃん,熊,5
4,こげxん, Sanxio,こげぱん,パン,0.1
5,名x偵コナン,サンデー,こなん,人間,17
6,カピバxさん,Trtworxs,ほわいとさん,カピバラ,3
7,xウルと動く城,xブリ,はうる,魔法使い,100

でけた。

まとめ

・辞書機能を用いて揺れてる文字列以外のキーで重複削除ができる。
・データが後勝ちになるのでどっちが残ってもいいケースに限り利用可

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4