17
17
)
18
18
import pandas .compat as compat
19
19
from pandas import Panel , DataFrame , Series , read_csv , concat
20
- from pandas .core .common import PandasError
20
+ from pandas .core .common import is_list_like , PandasError
21
21
from pandas .io .parsers import TextParser
22
22
from pandas .io .common import urlopen , ZipFile , urlencode
23
23
from pandas .util .testing import _network_error_classes
@@ -41,8 +41,9 @@ def DataReader(name, data_source=None, start=None, end=None,
41
41
42
42
Parameters
43
43
----------
44
- name : str
45
- the name of the dataset
44
+ name : str or list of strs
45
+ the name of the dataset. Some data sources (yahoo, google, fred) will
46
+ accept a list of names.
46
47
data_source: str
47
48
the data source ("yahoo", "google", "fred", or "ff")
48
49
start : {datetime, None}
@@ -436,24 +437,37 @@ def get_data_fred(name, start=dt.datetime(2010, 1, 1),
436
437
Date format is datetime
437
438
438
439
Returns a DataFrame.
440
+
441
+ If multiple names are passed for "series" then the index of the
442
+ DataFrame is the outer join of the indicies of each series.
439
443
"""
440
444
start , end = _sanitize_dates (start , end )
441
445
442
446
fred_URL = "http://research.stlouisfed.org/fred2/series/"
443
447
444
- url = fred_URL + '%s' % name + '/downloaddata/%s' % name + '.csv'
445
- with urlopen (url ) as resp :
446
- data = read_csv (resp , index_col = 0 , parse_dates = True ,
447
- header = None , skiprows = 1 , names = ["DATE" , name ],
448
- na_values = '.' )
449
- try :
450
- return data .truncate (start , end )
451
- except KeyError :
452
- if data .ix [3 ].name [7 :12 ] == 'Error' :
453
- raise IOError ("Failed to get the data. Check that {0!r} is "
454
- "a valid FRED series." .format (name ))
455
- raise
448
+ if not is_list_like (name ):
449
+ names = [name ]
450
+ else :
451
+ names = name
456
452
453
+ urls = [fred_URL + '%s' % n + '/downloaddata/%s' % n + '.csv' for
454
+ n in names ]
455
+
456
+ def fetch_data (url , name ):
457
+ with urlopen (url ) as resp :
458
+ data = read_csv (resp , index_col = 0 , parse_dates = True ,
459
+ header = None , skiprows = 1 , names = ["DATE" , name ],
460
+ na_values = '.' )
461
+ try :
462
+ return data .truncate (start , end )
463
+ except KeyError :
464
+ if data .ix [3 ].name [7 :12 ] == 'Error' :
465
+ raise IOError ("Failed to get the data. Check that {0!r} is "
466
+ "a valid FRED series." .format (name ))
467
+ raise
468
+ df = concat ([fetch_data (url , n ) for url , n in zip (urls , names )],
469
+ axis = 1 , join = 'outer' )
470
+ return df
457
471
458
472
def get_data_famafrench (name ):
459
473
# path of zip files
0 commit comments