LoginSignup
25
31

More than 5 years have passed since last update.

Pythonでpdfデータにあるテーブルデータを一括でcsvに直す方法

Last updated at Posted at 2019-03-03

何ページにもわたるテーブルデータ(pdf形式)をpythonとかでいじりたい時に!
私が持っていたpdfデータはページごとに注釈がついていたりして、どのpdf/csvの変換サイトでもうまくできませんでした。

sample1.py
#pdfからcsvに変換するのに使う。ページ指定で1枚ずつしか一気に使えないです。
from tabula import wrapper
#pdfのページ数を数えるのに使う
import PyPDF2

#任意のファイルパスをここに記載
FILE_PATH = "***"

#ページ数を取得
with open(FILE_PATH, mode='rb') as f:
    pages = PyPDF2.PdfFileReader(f).getNumPages()

#このデータフレームに全ページのデータを入れます
df = pd.DataFrame(columns = "欲しいカラム名")  

#全ページのテーブルデータを一つのデータフレームに
for i in range(pages+1):
    tmp = wrapper.read_pdf(FILE_PATH, pages = i, encoding = "utf-8_sig", spreadsheet=True)
    df = pd.concat([df, tmp], ignore_index=True)

これでデータフレームはこんな感じに。pdf43枚くらいのテーブルデータが2分くらいで一つのデータフレームにできました。
Screen Shot 2019-03-03 at 14.45.00.png

毎行にNaNが入ってしまっているので、

sample2.py
import pandas as pd 
df = df.dropna()

をすれば、

Screen Shot 2019-03-03 at 14.46.38.png

こんな感じでとても綺麗なテーブルデータができます。

今回は1つのpdfの変換でしたが、複数のpdfのテーブルデータを一つのデータフレームにしたい時は(例えば国毎年発表している医者の数とかそういうデータ)

sample3.py
import glob
for i in glob.glob("任意のフォルダ"):
    #sample1.pyの操作

なんてすれば一気に作業できちゃいます

あとはこの一行

sample4.py
df.to_csv("任意のcsvのパス")

でcsvに変換できます。データフレームで機械学習かけようが、csvでエクセルに通して統計資料まとめたり、いろいろできます!

25
31
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
25
31