Skip to content

pandas_datareader is maintained again (0.11.0/0.11.1, June 2026) — reconsider it as the builder-side entry point for dynamic data #26

Description

@mmcky

What changed

pandas-datareader had been effectively unmaintained since 0.10.0 in July 2021. That is no longer true — two releases landed in June 2026:

Version Date What
0.11.0 2026-06-23 pandas 3 compatibility; new pandas_datareader.macro API
0.11.1 2026-06-24 fix to OECDReader for large mostly-empty frames

Two parts of 0.11.0 matter here.

pandas 3 compatibility. It vendored deprecate_kwarg to drop the dependency on the private pandas.util._decorators module — the exact failure recorded in QuantEcon/lecture-python.myst#924, which blocked the anaconda 2026.06 upgrade. That incompatibility was the concrete reason the package was on its way out.

A unified macro API. 0.11.0 adds pandas_datareader.macro, described in the release notes as providing "unified access to FRED, Eurostat, and OECD macro datasets via read_macro, search_macro_datasets, and describe_*".

Why this is a question for this repo

The second point is a candidate answer to something PLAN Phase 5 and Phase 8 P4 already need: a single consistent fetch layer for dynamic macro series, living in a builder rather than in lecture notebooks.

Phase 8 P4 is UNRATE — "consumed today by 4 lectures across 3 repos via 2 access methods" — and it is the pilot that establishes the dynamic template plus the documented live-call ↔ snapshot switch. pandas_datareader.macro covers FRED, Eurostat and OECD behind one interface, which would make a builder's fetch stage uniform across sources instead of one client per source.

Note the direction this implies: pandas_datareader moves out of lecture runtime and into scripts/. As a builder dependency it runs on a cadence, its failures surface in the Phase 5 sources-alive canary instead of in seven lecture repos' CI — which is exactly the relocation Phase 5 sets out to achieve — and lectures read a stable URL.

Current usage, for the record

Ten published lectures across four repos reference it. Six genuinely use it; four carry an install line they never import — see the note below the table.

Repo Lecture Reference Used?
lecture-python.myst unemployment_linear !pip install pandas_datareader; from pandas_datareader import data as web yes
lecture-python.myst unemployment_shocks combined !pip install numpyro jax pandas_datareader arviz; same import yes
lecture-python.myst phillips_lost_conquest !pip install pandas_datareader; same import yes
lecture-python.myst phillips_two_stories !pip install pandas_datareader; same import yes
lecture-python-intro business_cycle !pip install pandas-datareader; import pandas_datareader.data as web, alongside wbgapi yes
lecture-python-intro networks !pip install pandas-datareader only no
lecture-python-intro input_output !pip install pandas-datareader only no
lecture-python-advanced.myst doubts_or_variability !pip install pandas-datareader only no
lecture-datascience.myst tools/classification import pandas_datareader.data as web (pip dep in environment.yml) yes
lecture-datascience.myst tools/visualization_rules from pandas_datareader import DataReader (same) yes

Four of the ten are vestigial installsnetworks, input_output and doubts_or_variability install the package and never import it. doubts_or_variability is the instructive one: a comment at line 2013 records that it deliberately avoids pandas-datareader by reading FRED's CSV endpoint directly, so the migration was done and only the install line was left behind. These four can be deleted with no code change, independent of whatever is decided below.

Of the six real usages, five are FRED readers. business_cycle is the one already half-migrated to wbgapi, and is also the lecture behind this repo's single existing dynamic snapshot (business_cycle_data.csv).

lecture-python.myst and lecture-python-intro are both on anaconda=2026.07 (pandas 3.x), and all four lecture-python.myst pages publish clean with no tracebacks — consistent with 0.11.0 working under pandas 3. lecture-datascience.myst is still on anaconda=2024.06 and carries pandas-datareader as an explicit pip dependency in environment.yml.

Questions

  • Does pandas_datareader.macro become the standard fetch layer for dynamic snapshots, or do we keep per-source clients (wbgapi, fredapi) and treat this as one option among several?
  • Should P4's UNRATE builder be written against it, making the pilot the test of this decision?
  • Does the live-call ↔ snapshot switch keep a live pandas_datareader path available inside lectures at all, or is snapshot-only the target?

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions