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
Nobody has claimed this yet.
- 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 installs — networks, 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.macrobecome 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
UNRATEbuilder be written against it, making the pilot the test of this decision? - Does the live-call ↔ snapshot switch keep a live
pandas_datareaderpath 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_datareaderin favour ofwbgapi(merged 2025-03-12), on the "not receiving updates" rationale
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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