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.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
What changed
pandas-datareaderhad been effectively unmaintained since 0.10.0 in July 2021. That is no longer true — two releases landed in June 2026:pandas_datareader.macroAPIOECDReaderfor large mostly-empty framesTwo parts of 0.11.0 matter here.
pandas 3 compatibility. It vendored
deprecate_kwargto drop the dependency on the privatepandas.util._decoratorsmodule — 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 viaread_macro,search_macro_datasets, anddescribe_*".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.macrocovers 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_datareadermoves out of lecture runtime and intoscripts/. 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.
lecture-python.mystunemployment_linear!pip install pandas_datareader;from pandas_datareader import data as weblecture-python.mystunemployment_shocks!pip install numpyro jax pandas_datareader arviz; same importlecture-python.mystphillips_lost_conquest!pip install pandas_datareader; same importlecture-python.mystphillips_two_stories!pip install pandas_datareader; same importlecture-python-introbusiness_cycle!pip install pandas-datareader;import pandas_datareader.data as web, alongsidewbgapilecture-python-intronetworks!pip install pandas-datareaderonlylecture-python-introinput_output!pip install pandas-datareaderonlylecture-python-advanced.mystdoubts_or_variability!pip install pandas-datareaderonlylecture-datascience.mysttools/classificationimport pandas_datareader.data as web(pip dep inenvironment.yml)lecture-datascience.mysttools/visualization_rulesfrom pandas_datareader import DataReader(same)Four of the ten are vestigial installs —
networks,input_outputanddoubts_or_variabilityinstall the package and never import it.doubts_or_variabilityis the instructive one: a comment at line 2013 records that it deliberately avoidspandas-datareaderby 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_cycleis the one already half-migrated towbgapi, and is also the lecture behind this repo's single existing dynamic snapshot (business_cycle_data.csv).lecture-python.mystandlecture-python-introare both onanaconda=2026.07(pandas 3.x), and all fourlecture-python.mystpages publish clean with no tracebacks — consistent with 0.11.0 working under pandas 3.lecture-datascience.mystis still onanaconda=2024.06and carriespandas-datareaderas an explicit pip dependency inenvironment.yml.Questions
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?UNRATEbuilder be written against it, making the pilot the test of this decision?pandas_datareaderpath available inside lectures at all, or is snapshot-only the target?Related
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 itpandas_datareaderin favour ofwbgapi(merged 2025-03-12), on the "not receiving updates" rationale