pythonでpdfの表を読み込む
pythonにtabula-pyというpdfから表を読み込むパッケージがある
インストールと使用時にちょっと戸惑ったのでメモ
やったこと
1. tabula-pyのインストール
pipでインストールしたが、ちょっと手間取った
というのもインストールしたいのは"tabula-py"だが
"tabula"というパッケージもあり
うっかりこちらをインストールしてしまった
"tabula"がなんのパッケージなのか調べなかったが
"tabula-py"と"tabula"では使えるコマンドが違うし
両方入れていても"tabula-py"は正常に動かなくてしばらく悩んだ
それでまず"tabula-py"と"tabula"の両方をアンインストールして
"tabula-py"を再インストールすると正常に動いた
インストールされているパッケージを確認すると
"tabula"と"tabula-py"がインストールされているので
まずは両方アンインストールした
> pip list tabula 1.0.5 tabula-py 2.6.0 > pip uninstall tabula > pip uninstall tabula-py
pipのアップグレードを行って
"tabula-py"を再インストール
> pip install --upgrade pip > pip install tabula-py > pip list sympy 1.5.1 tabula-py 2.6.0 terminado 0.8.3
とりあえずこれで準備完了
2. tabula.read()を使う
pdfの読み込みにtabula.read_pdf()を使った
引数はファイルのパスと、表の有無、読み込むページを記述した
filename.pdfから表ありの1ページ目を読み込むときには以下のように記述する
import tabula tabula.read_pdf(/path/to/filename.pdf, lattice = True, pages = 1)
importに"tabula"と記述するのがややこしい
戻り値は基本DataFrameだが
読み込んだpdfに複数の表があると
リストにまとめられている
例えば2つ目の表の1行目を取り出すには以下のようにする
tabula.read_pdf(/path/to/filename.pdf, lattice = True, pages = 1)[1].iloc[0, :]
3. CSV形式で保存
取り出した表の保存にto_csv()を使用した
df = tabula.read_pdf(/path/to/filename.pdf, lattice = True, pages = 1)[1].iloc[0, :] df.to_csv(/path/to/filename.csv, encoding = 'cp932')
windowsを使っているのでencodingにcp932を指定した