LoginSignup
6
4

More than 3 years have passed since last update.

48日目。pandasで10万×1万のCSVをマージしたら簡単・早くて驚きました!

Posted at

データAとデータBの穴あきをできるかぎり埋めたい。
データAが10万件。データBが1万件。CSVです。

Excelで開いてギリいけるかなと思ったのですがとても遅い。
Pythonでforループを二重に回してもそこそこかかる。

・・・そこでpandasを使ってみました。

インストール

毎度おなじみpipさんです。

pip install pandas

pandasでマージしてみる。

CSVをそれぞれデータフレームに読み込んで、インデックスでマージ。data01.csvに合わせたかったので、左結合にしてみました。

test.py
# 一般的に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時間)

6
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
6
4