質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1622閲覧

Python3 : tabula.read_pdf でPDFを読み込めない(入力データの行数が少ない場合)

H-Tommy

総合スコア3

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2023/01/06 09:35

前提

python3で、PDFデータを読み込むコードを書いています。
tabula.read_pdfという関数を使用して、以下のようにPDFファイルを読み込もうとしたところ、
以下の通り読み込めませんでした。

#プログラムの中身 filename_m= "test.pdf" tp_m = tabula.read_pdf(filename_m, stream=True, pages = 'all', encoding='shift-jis', silent=True) print("tp_m=") print(tp_m) #出力  tp_m= []   

ここでtest.pdfの中身は以下の通りです。
次に、データの行数を2行にした"test2.pdf", 3行の"test3.pdf", 4行の"test4.pdf"を用意しました。

イメージ説明
イメージ説明

上記のプログラムを実行したところ、
"test2.pdf"と"test3.pdf"については同様に読み込めませんでした。
一方で、"test4.pdf" については以下の通り読み込めました。

filename_m= "test4.pdf" tp_m = tabula.read_pdf(filename_m, stream=True, pages = 'all', encoding='shift-jis', silent=True) print("tp_m=") print(tp_m) #出力 tp_m = [ Unnamed: 0 1WEEK 1MONTH 2MONTH 3MONTH 4MONTH 5MONTH 6MONTH 0 2023/1/4 -0.04545 0.06818 NaN 0.06364 NaN NaN 0.14364 1 2023/1/5 -0.04545 0.06818 NaN 0.06364 NaN NaN 0.14364 2 2023/1/6 -0.04545 0.06818 NaN 0.06364 NaN NaN 0.14364 3 2023/1/7 -0.04545 0.06818 NaN 0.06364 NaN NaN 0.14364]

同様に、5行以上の入力データを作成して試したところ、読み込まれました。

質問

ⅰ) tabula.read_pdfは、入力データが4行以上の場合のみ読み込めるのでしょうか。

ⅱ) もしそうであるなら、改善策はありますか?
入力用のPDFファイルに記述されているデータの行数が1~3行の場合に、それを読み込める関数などがあれば、ご教示いただきたいです。もしくは、現状のプログラムを修正して改善できるのでしょうか

以上、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

公式ドキュメントより:

I got a empty DataFrame. How can I resolve it?

前提として、対象の PDF はテキストベースのテーブル情報を含んでいること。画像ベースのものはサポートしていない。

解決策として提示されているのは:

  • 正確にテーブルを検知するため、area を指定する
  • テーブルに明確なラインがあるなら lattice=True を試す、もしくは stream=True を試す

これでもダメなら、tabula app を使ってみる。tabula の GUI バージョンで、直接テーブルの位置を指定できる。

もしこれで、テーブルが抽出できて、tabula.py で出来なかったら、GitHub の Issue で報告してください。とのこと。

投稿2023/01/07 01:23

Demerara

総合スコア392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

H-Tommy

2023/01/16 04:56

area を指定したところ解決できました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問