Скорее всего, проблема возникает из-за того, что список a
объявлен локально в пределах l oop, что означает, что данные, которые он содержит, переопределяются на каждой итерации.
Чтобы решить эту проблему, мы можем объявить список вне области действия l oop. Таким образом, он может сохранять свою информацию.
t = ['AAPL', 'MSFT']
a = []
for str in t:
stock = yf.Ticker(str)
a.append(stock.info.get('sharesOutstanding'))
В качестве альтернативы, вы можете использовать другую встроенную функцию в API, как показано в документах .
tickers = yf.Tickers('aapl msft')
# ^ returns a named tuple of Ticker objects
# access each ticker
tickers.msft.info.get('sharesOutstanding'))
tickers.aapl.info.get('sharesOutstanding'))
РЕДАКТИРОВАТЬ
Если вы предпочитаете, вы можете упростить l oop с пониманием списка, как показано:
t = ['AAPL', 'MSFT']
a = [yf.Ticker(str).info.get('sharesOutstanding') for str in t]
Поскольку Ticker(str).info
Объект - это словарь Python, мы можем передать дополнительный аргумент в функцию get
, чтобы указать значение по умолчанию.
a = [yf.Ticker(str).info.get('sharesOutstanding', 'NaN') for str in t]
В этом случае, если в словаре нет клавиши 'sharesOutstanding'
, по умолчанию будет None
. Таким образом, мы можем гарантировать, что len(a) == len(t)
.
Чтобы создать pandas фрейм данных, попробуйте что-то вроде
df = pd.DataFrame(a, t, columns=['sharesOutstanding'])