GitHub

@@ -130,7 +130,6 @@ import datetime as dt

130130

import numpy as np

131131

import pandas as pd

132132

import matplotlib.pyplot as plt

133-

from pandas_datareader import data as web

134133

from scipy.stats import norm

135134

from scipy.optimize import brentq

136135

```

@@ -2011,8 +2010,12 @@ end_date = dt.datetime(2007, 1, 1)

201120102012201120132012

def _read_fred_series(series_id, start_date, end_date):

2014-

series = web.DataReader(series_id, "fred", start_date, end_date)[series_id]

2015-

series = pd.to_numeric(series, errors="coerce").dropna().sort_index()

2013+

# Download directly from FRED's CSV endpoint. This avoids pandas-datareader,

2014+

# which is unmaintained and incompatible with pandas 3.0.

2015+

url = f"https://fred.stlouisfed.org/graph/fredgraph.csv?id={series_id}"

2016+

df = pd.read_csv(url, index_col=0, parse_dates=True)

2017+

series = pd.to_numeric(df.iloc[:, 0], errors="coerce").dropna().sort_index()

2018+

series = series.loc[start_date:end_date]

20162019

if series.empty:

20172020

raise ValueError(f"FRED series '{series_id}' returned no data in sample window")

20182021

return series

Read the original on github.com ↗