Registry / data / ibis-framework

ibis-framework

JSON →
library12.0.0pypypi✓ verified 22d ago

Ibis is a portable Python dataframe library that provides a Pythonic way to build and execute operations on data in various backends, including SQL databases, data warehouses, and data lakes. It offers a familiar dataframe API that compiles into the backend's native language, enabling local iteration and remote deployment by changing a single line of code. It is currently at version 12.0.0 and maintains an active release cadence with frequent updates.

pip install 'ibis-framework[duckdb,examples]'
INSTALL
IMPORT
SIG · IBIS-FRAMEWORK
I
ibis-framework
datapythonv12.0.0
Install
10.1s avg
Import
731ms
Disk
55MB
Pass rate
5/ 10
Env Coverage5 / 10
glibc
3.93.13
musl
3.93.13
Install & Compatibility
Where this runs
tested against v12.0.0 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
glibc
py 3.10
2/3 runs
✓ 10.57s
py 3.11
2/3 runs
✓ 9.93s
py 3.12
2/3 runs
✓ 9.2s
py 3.13
2/3 runs
✓ 9.03s
py 3.9
2/3 runs
✓ 11.7s
55MB installed
● package 55MB
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

ibis
import ibis
import ibis
Installing 'ibis' (a web templating framework) instead of 'ibis-framework' (the dataframe library) is a common mistake. Always install 'ibis-framework' from PyPI.
ibis.options.interactive
ibis.options.interactive = True
Enables eager evaluation for interactive exploration, though it can be slower for production workloads and is not strictly necessary.

This quickstart demonstrates how to connect to an in-memory DuckDB backend, load an example dataset, define a lazy dataframe expression to calculate the average bill length per penguin species, and then execute it to retrieve the results as a pandas DataFrame. It showcases Ibis's core lazy evaluation pattern.

import ibis # Connect to an in-memory DuckDB database (default backend) con = ibis.duckdb.connect(':memory:') # Load example data (e.g., the 'penguins' dataset) t = ibis.examples.penguins.fetch() # Create a table in the connected database con.create_table('penguins', t.to_pyarrow(), overwrite=True) # Get a table expression from the connection table = con.table('penguins') # Perform a lazy computation: group by species and calculate mean bill length result_expr = table.group_by('species').agg(avg_bill_length=table.bill_length_mm.mean()) # Execute the expression and fetch results into a pandas DataFrame df = result_expr.to_pandas() print(df)
ibis --version
Debug
Known issues
breakingPython 3.9 is no longer supported. Users must upgrade to Python 3.10 or newer.
fix
Upgrade your Python environment to 3.10 or a later version.
affects: >=12.0.0
breakingPySpark versions older than 3.5 are no longer supported when using the PySpark backend.
fix
If using the PySpark backend, ensure PySpark is version 3.5 or newer.
affects: >=12.0.0
breakingThe `DataType.name` attribute has been removed. Use `DataType.__class__.__name__` instead to get the string name of a data type.
fix
Replace `dt.name` with `dt.__class__.__name__` where `dt` is an Ibis DataType object.
affects: >=11.0.0
breakingExplicit naming of `memtable`s is no longer supported. Use `create_table` or `create_view` for named objects.
fix
Instead of explicitly naming ephemeral in-memory tables, use `connection.create_table()` or `connection.create_view()` for persistent or named views.
affects: >=11.0.0
gotchaIbis uses lazy evaluation. Operations define an expression graph but do not execute immediately. To get results, you must explicitly call methods like `.execute()` or `.to_pandas()`.
fix
Always append `.execute()` or `.to_pandas()` (or similar materialization methods) to your Ibis expression chain to trigger computation and retrieve results.
affects: All versions
gotchaThere is a different PyPI package also named `ibis` which is a web templating framework. Ensure you install `ibis-framework` for the dataframe library.
fix
Always use `pip install ibis-framework` (with relevant extras) or `conda install ibis-framework` to install the correct library.
affects: All versions
Errors
Common errors & fixes
ModuleNotFoundError: No module named 'ibis'
This error often occurs because users mistakenly install the `ibis` package (a web templating framework) instead of `ibis-framework` (the data analytics library), or both packages are installed, leading to a conflict as they share the `ibis` module name.
fix
First, uninstall any incorrect `ibis` installations: `pip uninstall ibis`. Then, install the correct Ibis data framework: `pip install ibis-framework` or `conda install -c conda-forge ibis-framework`.
AttributeError: module 'ibis' has no attribute 'impala'
This error indicates that a specific backend (like Impala, or `connect` methods for other backends) was not installed along with the core `ibis-framework` package. Ibis backends need to be installed as 'extras' or separately.
fix
Install the `ibis-framework` with the specific backend extra you intend to use. For Impala, this would be: `pip install 'ibis-framework[impala]'` or `conda install -c conda-forge ibis-framework-impala`. Replace `impala` with the desired backend (e.g., `duckdb`, `postgres`).
AttributeError: 'NoneType' object has no attribute 'read_parquet'
This error typically arises when attempting to perform I/O operations like `read_parquet` without an appropriate backend (e.g., DuckDB) being installed or explicitly configured as the default backend for Ibis to use for such operations.
fix
Ensure the necessary backend for reading parquet files (commonly DuckDB) is installed as an extra: `pip install 'ibis-framework[duckdb]'` or `conda install -c conda-forge ibis-framework-duckdb`. You might also need to explicitly connect to the backend: `import ibis; con = ibis.duckdb.connect()`.
ibis.common.exceptions.IbisError: Table not found: <table_name>
This IbisError occurs when a table referenced in an Ibis expression or operation (e.g., `c.insert('t', df, database='db.mydbo')`) does not exist in the connected database or the fully qualified name is incorrect.
fix
Verify that the table name and its schema/database context are correct and that the table actually exists in the backend you are connected to. Ensure correct casing and full path if required by the database. If inserting, the table must exist prior to the `insert` call unless the backend supports schema creation on the fly.
Upgrade
Version history
12.0.0latest on PyPI · released Feb 7, 2026
Audit
Dependencies
duckdboptionalDefault and recommended local backend for high performance.
pandasoptionalCommonly used for converting Ibis expressions to in-memory DataFrames with `.to_pandas()`.
pyarrowoptionalUsed for efficient data handling and interoperability between Ibis and other data libraries.
pysparkoptionalBackend for Apache Spark integration.
sqlalchemyoptionalUnderpins many SQL database connections.
Agent activity
15 hits · last 30 days
node
12
Resources