Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

downloading yahoofinance data for date ranges

I have a dataframe with 900 tickers in it, and I’m trying to download adjusted close prices -15 business days before said date through 30 business days after said date, for a total of ~9 weeks of data.

    date        symbol  date_start  date_end
0   2020-03-20  USAU    2020-02-28  2020-05-01
1   2020-03-20  INLX    2020-02-28  2020-05-01
4   2020-03-20  SIML    2020-02-28  2020-05-01
6   2020-03-19  NLNK    2020-02-27  2020-04-30
7   2020-03-19  OMWS    2020-02-27  2020-04-30
9   2020-03-19  LUMO    2020-02-27  2020-04-30
11  2020-03-18  T.TO    2020-02-26  2020-04-29
12  2020-03-18  TU      2020-02-26  2020-04-29
15  2020-03-16  SUMR    2020-02-24  2020-04-27
17  2020-03-16  DTYS    2020-02-24  2020-04-27

I tried to filter on a start date and an end date with -15/+30 threshold for yahoo finance, but I keep getting returned null.
I would try the mass download feature, df = yf.download(tickers = [list_of_tickers],...) but it requires explicitly start dates and end dates, and I’m not sure how to get around that. It’s returning a pandas dataframe, so I’m not sure if that’s the problem explicitly.

I’m aware of this from the documentation, but there’s no solution to my problem in there.: How to deal with multi-level column names downloaded with yfinance

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Code is below for brainstorming, but I am stuck and don’t know how to navigate this problem

data_stocks = []

for symbol in data_shortened['symbol']:
    try: 
        placeholder = yf.download(symbol, data_shortened['start_date'], data_shortened['end_date'])
        data_stocks.append(placeholder)
    
    except:
        print('Failed')
        print(len(data_stocks))

Thank you for any help.

>Solution :

You can use iterrows:

data_stocks = {}

for _, row in data_shortened.iterrows():
        placeholder = yf.download(row['symbol'], row['date_start'], row['date_end'])
        data_stocks[row['symbol']] = placeholder

stocks = pd.concat(data_stocks)

Output:

>>> stocks
                  Open   High    Low  Close  Adj Close   Volume
     Date                                                      
USAU 2020-02-27    7.1    7.5    6.5    6.9        6.9  23460.0
     2020-02-28    6.5    6.8    6.0    6.3        6.3  22010.0
     2020-03-02    6.5    6.6    6.0    6.1        6.1   7300.0
     2020-03-03    6.4    6.5    6.0    6.5        6.5   9700.0
     2020-03-04    6.5    7.0    6.1    7.0        7.0  13340.0
...                ...    ...    ...    ...        ...      ...
DTYS 2020-04-20  120.0  120.0  120.0  120.0      120.0      0.0
     2020-04-21  120.0  120.0  120.0  120.0      120.0      0.0
     2020-04-22  120.0  120.0  120.0  120.0      120.0      0.0
     2020-04-23  120.0  120.0  120.0  120.0      120.0      0.0
     2020-04-24  120.0  120.0  120.0  120.0      120.0      0.0

[358 rows x 6 columns]
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading