データAとデータBの穴あきをできるかぎり埋めたい。
データAが10万件。データBが1万件。CSVです。
Excelで開いてギリいけるかなと思ったのですがとても遅い。
Pythonでforループを二重に回してもそこそこかかる。
・・・そこでpandasを使ってみました。
###インストール
毎度おなじみpipさんです。
pip install pandas
###pandasでマージしてみる。
CSVをそれぞれデータフレームに読み込んで、インデックスでマージ。data01.csvに合わせたかったので、左結合にしてみました。
# 一般的にpandasはpdと名前を付けてimportするお約束らしい。
import pandas as pd
#csvを読み込む。headerが日本語だとうまくマージできなかったので-1に。なかった事になるらしい。
df1 = pd.read_csv('data01.csv',header=-1)
df2 = pd.read_csv('data02.csv',header=-1)
#csvにタイトルをつける。
df1.columns=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X']
df2.columns=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
#マージする。
# pd.merge(データ1、データ2、左結合、結合キーをそれぞれ指定
df3 = pd.merge(df1,df2,how='left',left_on='A')
#一画面におさまるよう中略して表示される。すごい。
print(df3)
#CSVで保存
df3.to_csv('data03.csv')
###えーっ、たったこれだけ!?
ここまですっごく苦労したのに、最終的にこれだけになりました。
こんなにちょっとのコードで済むなんて・・・!!!
###一瞬でできた!!!
いやはや驚きました。数秒です。
一体どうなっているんだ。驚きの速さです。
###しかしデータを揃えるのがめんどくさい。
数値とそうじゃないの、空白、スペース、全角半角、文字化け、データクリーニングがえらい大変でした。ちょっと違うとすぐエラーです。揃ってしまえば一瞬なのですが、気難しい印象でした。
###またpandasする?
正直、もっといい方法がないかなーと思っています。グラフを書いたり、分析したり、本来そっちのツールなんですよね。でもこの軽さはすごい。
###参考にさせていただいたサイト
PythonとPandasがまとまっていてとても助かりました。
note.nkmk.me Top Python pandas pandas
クエリの組み方がさっぱりわからなかったのですが、この対応表のおかげでなんとなくつかめました。
SQL と Pandas の対応表
Pandasがなんだか、全体像をつかめました。
データ分析のライブラリ!Pandasとは【初心者向け】
Pandasの動かし方をざっくり。いろいろやってみましたが、結局全件マージで片付いてしまった。。。
データ分析で頻出のPandas基本操作
分かりやすかったです!
Pandasを使ったデータ操作の基本
Pandas説明書。
きれいなグラフを作ったり、ビッグデータを解析できるようになるらしい。
Python Data Analysis Library
(所要時間 6時間)