Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
18
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@ukisoft

csv のデータが重複してるよ〜 -> それ、pandas で除けまっせ

こんなこと起きた

csv を DB に入れようと思ったけど、primary key がダブリまくってる!
重複してる行を削除したいけど、excel で開けないほど重い・・・。
python でデータ処理しようかな・・・でも、たまには違う方法でやりたい・・・。

せや、pandas 使ったろ

環境整備

はしょります(^o^)
Macにanacondaをインストールする→ライブラリの追加 などを見てください。
anaconda を入れた後で jupyter を起動すると、
pandas を使うときに、途中経過などが見やすくて便利です。

こうするんじゃ!

まずは pandas を import して、csv を読み込む!

import pandas as pd
hoge = pd.read_csv('hoge.csv')

date にしたければ、parse_dates を使ってみたり、
column に名前つけたければ names 使ってみたり、
型指定したければ dtype を使ってみたりしてください。

hoge = pd.read_csv("hoge.csv",
                   parse_dates=[1],  # 対象のカラムインデックス
                   names=['hoge', 'fuga', 'hage'],
                   dtype={2: str}  # カラムインデックスと型の dict
                   )

次に重複を削除するために、先にソートします。
ソートしておくと、先にヒットするものを残すという処理が使えるようになるので、
残したい行が上に来るようにソートします。

sorted_hoge = hoge.sort_values(['hoge', 'fuga'],  # カラム名
                               ascending=[1, 0])  # desc か asc か

そして削除!

no_duplicated_hoge = sorted_hoge.drop_duplicates('hoge',  # このカラムで重複していると、
                                                 keep='first')  # 最初を残すようにする

最後に csv に書き込みましょう。

no_duplicated_hoge.to_csv('result.csv', 
                          index=False,  # 0, 1, 2... みたいなデータは要らないので削除 
                          date_format='%Y%m%d')  # 日付データがある場合は、これで変換可

結果

全然大したことしてないんですけど、
ささっと jupyter 起動して、ちゃかちゃか pandas 使うと、
「なんか俺凄いじゃん?」って気分になれるのでおすすめです。

おまけ(jupyter で使った、その他メソッド)

jupyter で途中経過を表示するために、head() というメソッド使うと良いと思います。
重複具合を調べたければ value_counts()
データの加工は、例えば行追加は loc()、中の文字列を置換したければ replace() とかあって、とても便利です。

「python で import csv して、with open()reader = csv.reader(f)for line in reader して...」に飽きたら、
jupyter + pandas に挑戦すると良いと思います!

18
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
18
Help us understand the problem. What is going on with this article?