Help us understand the problem. What is going on with this article?

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 に挑戦すると良いと思います!

ukisoft
まったり developer です。python と js を使うことが多いです。
rymansat
普段は宇宙開発に関わっていないサラリーマンが身近で誰でもできる宇宙開発を実現させることがリーマンサット・プロジェクト(Ryman Sat Project=rsp.)の目的です。キューブサットの開発をはじめ、宇宙を軸として様々なコミュニティやクリエイターとコラボレーションし、民間宇宙開発に関するネットワークを強化、拡張することを目指して活動しています。
https://www.rymansat.com/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした