Install & Quickstart
Python client for the Aesops dataset API — install it and inspect a dataset's schema and summary stats in a few lines of Python, no API key required.
Browse the full catalog without any credentials. Load datasets directly into pandas, polars, or a DuckDB connection (with range-request pushdown, so only the row-groups you query are fetched).
Install
uv add aesops # core: httpx + duckdb
uv add 'aesops[pandas]' # + pandas
uv add 'aesops[polars]' # + polars
uv add 'aesops[pandas,polars]' # bothRequires Python 3.9+.
Quickstart
list() and load_dataset() always work without an API key — see
Full catalog. Loading actual rows requires a key
unless the dataset is keyless — see Loading data
and the API's Authentication page.
Browse the catalog
from aesops import Client
# No key needed to browse — the full catalog is public
client = Client()
datasets = client.list(query="housing", license="MIT")
for ds in datasets:
print(ds.slug, ds.row_count, ds.keyless)Inspect a dataset's schema
# Fetch metadata + schema (works for any dataset, keyless or not)
ds = client.load_dataset("kenya-housing-prices")
print(ds.name, ds.row_count, ds.column_count)
for col in ds.detail.columns:
print(col.name, col.dtype)Summary statistics
describe() builds per-column summary stats from the metadata already
fetched by load_dataset() — no extra network call, no API key needed.
print(ds.describe())
# ┌────────┬────────┬───────┬────────────┬────────┬────────┬─────────┬──────┬────────┬────────┬────────┐
# │ column │ dtype │ count │ null_count │ null_% │ unique │ mean │ std │ min │ median │ max │
# ├────────┼────────┼───────┼────────────┼────────┼────────┼─────────┼──────┼────────┼────────┼────────┤
# │ year │ number │ 178 │ 0 │ 0.0 │ 16 │ 2018.50 │ 4.30 │ 2011.0 │ 2018.50 │ 2026.0 │
# │ month │ string │ 178 │ 0 │ 0.0 │ 12 │ NaN │ NaN │ NaN │ NaN │ NaN │
# └────────┴────────┴───────┴────────────┴────────┴────────┴─────────┴──────┴────────┴────────┴────────┘In a Jupyter/IPython notebook (or Zed's REPL), the same call renders as a
bordered HTML table instead when it's the last expression in a cell. Want a
real pandas.DataFrame for further chaining (.loc, filtering, etc.)?
ds.describe().to_frame()Dataset summary
A compact overview — name, slug, description, AI insights, link to the dataset's Aesops page, and any linked community discussions. Also no network call, no API key needed.
print(ds.summary())