[Python] KeyError: 'Adj Close' when downloading stock data using yfinance in Python

Discussão em 'Python' iniciado por Stack, Março 4, 2025.

  1. Stack

    Stack Membro Participativo

    import yfinance as yf
    import pandas as pd
    from pandas_datareader import data as pdt
    import datetime as dt
    import numpy as np
    from scipy.optimize import minimize

    end_date = dt.datetime.now()
    start_date = end_date - dt.timedelta(days=365*5)

    tickers = ['SPY', 'QQQ', 'GLD', 'VTI', 'BND']

    adj_close_df = pd.DataFrame()
    for ticker in tickers:
    data = yf.download(ticker, start = start_date, end = end_date)
    adj_close_df[ticker] = data['Adj Close']

    print(adj_close_df)


    and below is the result when it seems spyder cant get what I need :

    %runcell -i 0 C:/Users/User/Downloads/untitled0.py
    [*********************100%***********************] 1 of 1 completed
    ---------------------------------------------------------------------------
    KeyError Traceback (most recent call last)
    File ~\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\pandas\core\indexes\base.py:3805, in Index.get_loc(self, key)
    3804 try:
    -> 3805 return self._engine.get_loc(casted_key)
    3806 except KeyError as err:

    File index.pyx:167, in pandas._libs.index.IndexEngine.get_loc()

    File index.pyx:196, in pandas._libs.index.IndexEngine.get_loc()

    File pandas\\_libs\\hashtable_class_helper.pxi:7081, in pandas._libs.hashtable.PyObjectHashTable.get_item()

    File pandas\\_libs\\hashtable_class_helper.pxi:7089, in pandas._libs.hashtable.PyObjectHashTable.get_item()

    KeyError: 'Adj Close'

    The above exception was the direct cause of the following exception:

    KeyError Traceback (most recent call last)
    File c:\users\user\downloads\untitled0.py:16
    14 for ticker in tickers:
    15 data = yf.download(ticker, start = start_date, end = end_date)
    ---> 16 adj_close_df[ticker] = data['Adj Close']
    18 print(adj_close_df)

    File ~\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\pandas\core\frame.py:4101, in DataFrame.__getitem__(self, key)
    4099 if is_single_key:
    4100 if self.columns.nlevels > 1:
    -> 4101 return self._getitem_multilevel(key)
    4102 indexer = self.columns.get_loc(key)
    4103 if is_integer(indexer):

    File ~\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\pandas\core\frame.py:4159, in DataFrame._getitem_multilevel(self, key)
    4157 def _getitem_multilevel(self, key):
    4158 # self.columns is a MultiIndex
    -> 4159 loc = self.columns.get_loc(key)
    4160 if isinstance(loc, (slice, np.ndarray)):
    4161 new_columns = self.columns[loc]

    File ~\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\pandas\core\indexes\multi.py:3040, in MultiIndex.get_loc(self, key)
    3037 return mask
    3039 if not isinstance(key, tuple):
    -> 3040 loc = self._get_level_indexer(key, level=0)
    3041 return _maybe_to_slice(loc)
    3043 keylen = len(key)

    File ~\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\pandas\core\indexes\multi.py:3391, in MultiIndex._get_level_indexer(self, key, level, indexer)
    3388 return slice(i, j, step)
    3390 else:
    -> 3391 idx = self._get_loc_single_level_index(level_index, key)
    3393 if level > 0 or self._lexsort_depth == 0:
    3394 # Desired level is not sorted
    3395 if isinstance(idx, slice):
    3396 # test_get_loc_partial_timestamp_multiindex

    File ~\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\pandas\core\indexes\multi.py:2980, in MultiIndex._get_loc_single_level_index(self, level_index, key)
    2978 return -1
    2979 else:
    -> 2980 return level_index.get_loc(key)

    File ~\AppData\Local\spyder-6\envs\spyder-runtime\Lib\site-packages\pandas\core\indexes\base.py:3812, in Index.get_loc(self, key)
    3807 if isinstance(casted_key, slice) or (
    3808 isinstance(casted_key, abc.Iterable)
    3809 and any(isinstance(x, slice) for x in casted_key)
    3810 ):
    3811 raise InvalidIndexError(key)
    -> 3812 raise KeyError(key) from err
    3813 except TypeError:
    3814 # If we have a listlike key, _check_indexing_error will raise
    3815 # InvalidIndexError. Otherwise we fall through and re-raise
    3816 # the TypeError.
    3817 self._check_indexing_error(key)

    KeyError: 'Adj Close'


    enter image description here

    I am trying to download historical stock data for several tickers using the yfinance library in Python. but, I get an error when trying to get the 'Adj Close' column of the downloaded data. Here is the code I am using above :

    Continue reading...

Compartilhe esta Página