Notes

A few smaller behaviors worth knowing — long-running sessions, local-only operations, the public/gated split, and versioning.

Long-running sessions

Access to a dataset's underlying data is set up lazily — only once you actually read rows, not at load_dataset() — and refreshes itself automatically if it lapses mid-session. You don't need to handle this yourself; a session that stays open for hours won't stall or need re-authenticating.

Local-only operations

Some operations never touch the network, so they work instantly and never need an API key:

  • .describe() and .summary() summarize the metadata load_dataset() already fetched. .describe() returns a DescribeTable (bordered text/HTML display, no pandas required) — call .to_frame() on it for a real pandas.DataFrame. .summary() returns a Summary (same bordered text/HTML display) with name, slug, description, AI insights, a link to the dataset's Aesops page, and any linked community discussions.
  • Format conversion (CSV, Arrow, etc.) happens entirely on your machine once the data's been loaded — no extra wait on anything server-side.

Public catalog, gated data

list() and load_dataset() always work without an api_key — the full catalog and every dataset's metadata are public. Loading actual data (.to_pandas(), .to_polars(), .to_duckdb(), .sql(), .to_csv()) requires a key unless the dataset is currently keyless (ds.keyless). See Loading data and Authentication.

Versioning

Datasets are always served at their latest active version — there's no version pinning.

On this page