mortada / fredapi

Python API for FRED (Federal Reserve Economic Data) and ALFRED (Archival FRED)
Apache License 2.0
930 stars 160 forks source link

How would I write columns of a series to an Excel file with this? #19

Open ghost opened 7 years ago

ghost commented 7 years ago

Basically, I am having trouble writing columns to an Excel file from a series in Fred. My issue is in the last line of the dataget function, where I have tried many things, and each give an error.

from fredapi import Fred
import pandas as pd
import time

#key = blah

API_KEY = "blah"
fred = Fred(api_key = API_KEY)

#Format = (id, description)
data_list = [('SP500', 'Stock Exchange Index'), ('UNRATE', 'Civilian Unemployment Rate')]

def dataget (id,description):
    #get a series
    values = fred.get_series(id, observation_start='1/01/2012')

    #make an Excelwriter in a workbook called "FRED_DATA"
    writer = pd.ExcelWriter('FRED_Data', engine='xlsxwriter')

    #Create a custom sheet with (`description` + data) as the worksheet name. 
    values.to_excel(writer, str(description + " Data"))

    #BUT I WANT THAT LINE^ TO INCLUDE COLUMNS, so something like this...
    #values.to_excel(writer, str(description + "data"),columns = (date, description))

#Break each (series_id, name) tupple into a an (id,description) pair
for tupple in data_list:
    id = tupple[0]
    description = tupple[1]
    #call dataget on this pair
    dataget(id,description)

`
mortada commented 7 years ago

what error do you get?

ghost commented 7 years ago

Well, it just does not work when I do what I commented: the columns don't show up.

On Jul 4, 2017 8:07 PM, "Mortada Mehyar" notifications@github.com wrote:

what error do you get?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/mortada/fredapi/issues/19#issuecomment-312968856, or mute the thread https://github.com/notifications/unsubscribe-auth/AP7npoQsIcQtsZT8GpEbV97os89VDJBRks5sKtO-gaJpZM4OMnRc .

Liam3851 commented 7 years ago

@joshash I think the easiest would be a DataFrame, I think. For example, the following would put a DataFrame with your descriptions as the column names, and then write the result out to Excel:

values = pd.DataFrame({description:fred.get_series(id, observation_start='1/1/2012') for id, description in data_list})
values.to_excel('/Fred_Data.xlsx', sheet_name='FRED Data')

If you really want the data in different sheets (why?) then replace values.to_excel call in your example with values.to_frame().rename(columns={0:description}).to_excel(...)

I suggest referring at the Pandas documentation for more about Series and DataFrame.