2

我正在尝试使用 yfianance 包下载多个股票股息金额和各自的日期,并尝试将其保存在 python 数据框中。

我正在使用以下代码

import yfinance as yf

data = pd.DataFrame()
stock_list = ['MSFT','GOOG','AAPL']

start = '2019-10-1'
end = '2020-10-30'

for i in stock_list:
    data[i]= yf.Ticker(i).dividends.loc[start:end]

但我得到的是:

           MSFT  GOOG  AAPL
Date                        
2019-11-20  0.51   NaN   NaN
2020-02-19  0.51   NaN   NaN
2020-05-20  0.51   NaN   NaN
2020-08-19  0.51   NaN   NaN

如果我将 stock_list 中的股票头寸更改为(首先是 AAPL,最后是 MSFT)

stock_list = ['AAPL','GOOG','MSFT']

我明白了:

             AAPL  GOOG  MSFT
Date                          
2019-11-07  0.1925   NaN   NaN
2020-02-07  0.1925   NaN   NaN
2020-05-08  0.8200   NaN   NaN
2020-08-07  0.2050   NaN   NaN

我认为数据框为第一只股票设置了日期,并且由于后续股票在同一日期支付股息并不是必需的,因此它显示为 NaN。

我将不胜感激在给定时期内为一长串股票获得所有股息的任何帮助。

谢谢

4

2 回答 2

1

你可以使用pd.concat. 您可以观察到股息日期不同,这就是为什么您仅获得第一列的实际值的原因。

import yfinance as yf
import pandas as pd

data = pd.DataFrame()
stock_list = ['AAPL', 'MSFT','GOOG']

start = '2019-10-1'
end = '2020-10-30'

for i in stock_list:
    series = yf.Ticker(i).dividends.loc[start:end]
    data = pd.concat([data, series], axis=1)
data.columns = stock_list
于 2020-11-13T02:22:55.600 回答
0

由于第一次获得的日期与第一次发行的日期相结合,因为每个发行的股息日期不同,您可以使用查看列表pd.concat()

data = pd.concat([data,yf.Ticker(i).dividends.loc[start:end]], join='outer',axis=1)

                MSFT    GOOG    AAPL
2019-11-07 00:00:00 NaN NaN 0.1925
2019-11-20 00:00:00 0.51    NaN NaN
2020-02-07 00:00:00 NaN NaN 0.1925
2020-02-19 00:00:00 0.51    NaN NaN
2020-05-08 00:00:00 NaN NaN 0.8200
2020-05-20 00:00:00 0.51    NaN NaN
2020-08-07 00:00:00 NaN NaN 0.2050
2020-08-19 00:00:00 0.51    NaN NaN
于 2020-11-13T02:18:34.797 回答