1212 from urllib import urlencode
1313
1414import xml .etree .ElementTree as ET
15- import pandas as pd
1615
1716
1817class Fred (object ):
1918 earliest_realtime_start = '1776-07-04'
2019 latest_realtime_end = '9999-12-31'
2120 nan_char = '.'
2221 max_results_per_request = 1000
22+
2323 def __init__ (self ,
2424 api_key = None ,
2525 api_key_file = None ):
@@ -61,7 +61,8 @@ def _parse(self, date_str, format='%Y-%m-%d'):
6161 """
6262 helper function for parsing FRED date string into datetime
6363 """
64- return pd .to_datetime (date_str , format = format ).to_datetime ()
64+ from pandas import to_datetime
65+ return to_datetime (date_str , format = format ).to_datetime ()
6566
6667 def get_series_info (self , series_id ):
6768 """
@@ -81,7 +82,8 @@ def get_series_info(self, series_id):
8182 root = self .__fetch_data (url )
8283 if root is None :
8384 raise ValueError ('No info exists for series id: ' + series_id )
84- info = pd .Series (root .getchildren ()[0 ].attrib )
85+ from pandas import Series
86+ info = Series (root .getchildren ()[0 ].attrib )
8587 return info
8688
8789 def get_series (self , series_id , observation_start = None , observation_end = None , ** kwargs ):
@@ -105,12 +107,13 @@ def get_series(self, series_id, observation_start=None, observation_end=None, **
105107 a Series where each index is the observation date and the value is the data for the Fred series
106108 """
107109 url = "http://api.stlouisfed.org/fred/series/observations?series_id=%s&api_key=%s" % (series_id , self .api_key )
110+ from pandas import to_datetime , Series
108111
109112 if observation_start is not None :
110- observation_start = pd . to_datetime (observation_start , errors = 'raise' )
113+ observation_start = to_datetime (observation_start , errors = 'raise' )
111114 url += '&observation_start=' + observation_start .strftime ('%Y-%m-%d' )
112115 if observation_end is not None :
113- observation_end = pd . to_datetime (observation_end , errors = 'raise' )
116+ observation_end = to_datetime (observation_end , errors = 'raise' )
114117 url += '&observation_end=' + observation_end .strftime ('%Y-%m-%d' )
115118
116119 if kwargs is not None :
@@ -127,7 +130,7 @@ def get_series(self, series_id, observation_start=None, observation_end=None, **
127130 else :
128131 val = float (val )
129132 data [self ._parse (child .get ('date' ))] = val
130- return pd . Series (data )
133+ return Series (data )
131134
132135 def get_series_latest_release (self , series_id ):
133136 """
@@ -183,7 +186,8 @@ def get_series_as_of_date(self, series_id, as_of_date):
183186 data : Series
184187 a Series where each index is the observation date and the value is the data for the Fred series
185188 """
186- as_of_date = pd .to_datetime (as_of_date )
189+ from pandas import to_datetime
190+ as_of_date = to_datetime (as_of_date )
187191 df = self .get_series_all_releases (series_id )
188192 data = df [df ['realtime_start' ] <= as_of_date ]
189193 return data
@@ -232,7 +236,8 @@ def get_series_all_releases(self, series_id):
232236 'date' : date ,
233237 'value' : val }
234238 i += 1
235- data = pd .DataFrame (data ).T
239+ from pandas import DataFrame
240+ data = DataFrame (data ).T
236241 return data
237242
238243 def get_series_vintage_dates (self , series_id ):
@@ -282,7 +287,8 @@ def __do_series_search(self, url):
282287 data [series_id ][field ] = child .get (field )
283288
284289 if num_results_returned > 0 :
285- data = pd .DataFrame (data , columns = series_ids ).T
290+ from pandas import DataFrame
291+ data = DataFrame (data , columns = series_ids ).T
286292 # parse datetime columns
287293 for field in ["realtime_start" , "realtime_end" , "observation_start" , "observation_end" , "last_updated" ]:
288294 data [field ] = data [field ].apply (self ._parse , format = None )
0 commit comments