QuantEcon / QuantEcon/data-lectures

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

Open
#26 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

question
Dominant language
Python
Stars
1
Forks
1
Avg merge
58m
Merged PRs (30d)
18

Description

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

  • QuantEcon/meta#160 — the standing "deprecate or remove pandas_datareader" issue. Its premise, that the package "last received a release update in 2021 and the current maintainer is not inclined to maintain the readers", is now out of date; it should be re-read against this before anyone acts on it
  • QuantEcon/meta#89 — closed as not planned; this carries forward the data-access question it raised
  • QuantEcon/lecture-python.myst#924 — the pandas 3 breakage that 0.11.0 fixes
  • QuantEcon/lecture-python-programming#341 — removed pandas_datareader in favour of wbgapi (merged 2025-03-12), on the "not receiving updates" rationale

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the Phase 8 P4 UNRATE pilot, the Phase 5 sources-alive canary, and the existing business_cycle_data.csv snapshot. Review the six active pandas-datareader usages and the four vestigial install lines, then document the chosen fetch-layer approach, builder location under scripts/, and live-call versus snapshot behavior; done means the decision and implementation scope are explicit.

Written by the indexing model from the issue text.

Assessment

Tech stack
pandas, python
Domain
data-engineering
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.