Search code examples
pandasyahoofinancedatareader

difference between calling yahoo finance from 0.18 to 0.19


WARNING: NEWBIE

i had put off upgrading from pandas 0.18 to 0.19 until this morning. this code used to just give a deprication warning:

import pandas.io.data as web
x = web.DataReader('GE','yahoo',(2016, 10, 1), (2016, 11, 1))

now it throws an error and tells me: "The pandas.io.data module is moved to a separate package " builtins.ImportError: The pandas.io.data module is moved to a separate package (pandas-datareader). After installing the pandas-datareader package (https://github.com/pandas-dev/pandas-datareader), you can change the import from pandas.io import data, wb to from pandas_datareader import data, wb."

so, i rewrite my "from...import..." line to:

from pandas_datareader import data, wb

as expected, when i run the code, it throws an error:

builtins.NameError: name 'web' is not defined

when i try this code:

x = wb.pandas-datareader('GE','yahoo',(2016, 10, 1), (2016, 11, 1))

this error is thrown:

builtins.AttributeError: module 'pandas_datareader.wb' has no attribute 'pandas'

when i try this code:

x = wb.Datareader('GE','yahoo',(2016, 10, 1), (2016, 11, 1))

this error is thrown:

builtins.AttributeError: module 'pandas_datareader.wb' has no attribute 'DataReader'

can anyone please tell me how to call the datareader now? thanks in advance


Solution

  • The old method of using the data reader in pandas should not be used as the first error you encountered. So never use import pandas.io.data as web

    The correct way to access the modules of the new package pandas_datareader is what you wrote.

    from pandas_datareader import data, wb
    

    data and wb are modules (Python files) with many different functions that you can call to bring in different types of external data into your program. To see all the functions of each module use the dir command.

    You can see all the publicly available objects with:

    [attribute for attribute in dir(data) if attribute[0] != '_']
    

    Which outputs

    ['DataReader',
     'EurostatReader',
     'FamaFrenchReader',
     'FredReader',
     'GoogleDailyReader',
     'OECDReader',
     'Options',
     'YahooActionReader',
     'YahooDailyReader',
     'YahooOptions',
     'YahooQuotesReader',
     'get_components_yahoo',
     'get_data_famafrench',
     'get_data_fred',
     'get_data_google',
     'get_data_yahoo',
     'get_data_yahoo_actions',
     'get_quote_google',
     'get_quote_yahoo',
     'warnings']
    

    So, these are all the items that you can use after the . in the data module.

    If you run the same dir command with the wb module you will see that DataReader does not exist in that module. It exists in the above list in the data module.

    Finally, make sure you have spelled your function correctly DataReader has upper case R. Use tab completion to avoid these mistakes or you will get the no attribute error. If the function you want does not get outputted with the dir command then you are using the wrong module.

    DataReader also accepts strings as dates so the following will get you what you want.

    data.DataReader('GE','yahoo', '2016-10-1', '2016-11-1')