Camelot: PDF Table Extraction for Humans

Release v0.11.0. (Installation)

https://travis-ci.org/camelot-dev/camelot.svg?branch=master Documentation Status https://codecov.io/github/camelot-dev/camelot/badge.svg?branch=master&service=github https://img.shields.io/pypi/v/camelot-py.svg https://img.shields.io/pypi/l/camelot-py.svg https://img.shields.io/pypi/pyversions/camelot-py.svg https://badges.gitter.im/camelot-dev/Lobby.png https://img.shields.io/badge/code%20style-black-000000.svg https://img.shields.io/badge/continous%20quality-deepsource-lightgrey

Camelot is a Python library that can help you extract tables from PDFs!

Note

You can also check out Excalibur, the web interface to Camelot!


Here’s how you can extract tables from PDFs. You can check out the PDF used in this example here.

>>> import camelot
>>> tables = camelot.read_pdf('foo.pdf')
>>> tables
<TableList n=1>
>>> tables.export('foo.csv', f='csv', compress=True) # json, excel, html, markdown, sqlite
>>> tables[0]
<Table shape=(7, 7)>
>>> tables[0].parsing_report
{
    'accuracy': 99.02,
    'whitespace': 12.24,
    'order': 1,
    'page': 1
}
>>> tables[0].to_csv('foo.csv') # to_json, to_excel, to_html, to_markdown, to_sqlite
>>> tables[0].df # get a pandas DataFrame!

Cycle Name

KI (1/km)

Distance (mi)

Percent Fuel Savings

Improved Speed

Decreased Accel

Eliminate Stops

Decreased Idle

2012_2

3.30

1.3

5.9%

9.5%

29.2%

17.4%

2145_1

0.68

11.2

2.4%

0.1%

9.5%

2.7%

4234_1

0.59

58.7

8.5%

1.3%

8.5%

3.3%

2032_2

0.17

57.8

21.7%

0.3%

2.7%

1.2%

4171_1

0.07

173.9

58.1%

1.6%

2.1%

0.5%

Camelot also comes packaged with a command-line interface!

Note

Camelot only works with text-based PDFs and not scanned documents. (As Tabula explains, “If you can click and drag to select text in your table in a PDF viewer, then your PDF is text-based”.)

You can check out some frequently asked questions here.

Why Camelot?

  • Configurability: Camelot gives you control over the table extraction process with tweakable settings.

  • Metrics: You can discard bad tables based on metrics like accuracy and whitespace, without having to manually look at each table.

  • Output: Each table is extracted into a pandas DataFrame, which seamlessly integrates into ETL and data analysis workflows. You can also export tables to multiple formats, which include CSV, JSON, Excel, HTML, Markdown, and Sqlite.

See comparison with similar libraries and tools.

Support the development

If Camelot has helped you, please consider supporting its development with a one-time or monthly donation on OpenCollective!

The User Guide

This part of the documentation begins with some background information about why Camelot was created, takes you through some implementation details, and then focuses on step-by-step instructions for getting the most out of Camelot.

The API Documentation/Guide

If you are looking for information on a specific function, class, or method, this part of the documentation is for you.

The Contributor Guide

If you want to contribute to the project, this part of the documentation is for you.