こんなこと起きた
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 に挑戦すると良いと思います!