#python #dataframe #stock #yahoo-finance #price
#python #фрейм данных #акции #yahoo-финансы #Цена
Вопрос:
Я пытаюсь протестировать ставки дивидендов, указанные в файле CSV. Цель состоит в том, чтобы проверить ставки дивидендов для соответствующих акций на заданную дату в CSV. Итак, я пытаюсь собрать ставки дивидендов из yahoo finance, используя библиотеку yfinance, и цель состоит в том, чтобы добавить столбец моих собранных ставок рядом со ставками, указанными в файле csv, чтобы я мог видеть любую разницу.
это мой пример кода:
import pandas as pd
import yfinance as yf
from datetime import datetime,date
## Creating a dividend CSV file example
tickers = ['ABP.AX', 'ABP.AX','AZJ.AX','AZJ.AX','BEN.AX','CIP.AX','CIP.AX',
'CIP.AX','CIP.AX','CMW.AX','CMW.AX','CMW.AX','CMW.AX']
Dates = ['12/30/2019 0:00','6/29/2020 0:00','2/24/2020 0:00','8/24/2020 0:00',
'3/6/2020 0:00','12/30/2019 0:00','3/30/2020 0:00','6/29/2020 0:00',
'9/29/2020 0:00','12/30/2019 0:00','3/30/2020 0:00','6/29/2020 0:00','9/29/2020 0:00']
rates = [0.094500,0.090500, 0.137000,0.137000,0.310000,0.046269,0.046269,
0.046269,0.042500,0.018750,0.018750,0.018750, 0.018750]
tickers = pd.Series(tickers)
Dates = pd.Series(Dates)
rates = pd.Series(rates)
frame = {"symbols" : tickers, 'Dates': Dates, "Amounts":rates}
dividends_csv = pd.DataFrame(frame)
## Now starting my Testing Process
stocks = (dividends_csv.symbols)
stocks = stocks.unique()
# My Desired Dates Range
start = '2019-10-1'
end = '2020-10-30'
data = pd.DataFrame()
## Collecting data from yahoo finance
for i in stocks:
series= yf.Ticker(i).dividends.loc[start:end]
data = pd.concat([data, series], axis=1)
data.columns = stocks
data.fillna(0)
# Transposing the data
data1 = data.T
## To have better view of the data set cearting MultiIndex data frame
data2= data1.stack()
data2 = data2.to_frame()
## Assigning Names to Indices
data2.index.names = ['symbol','Date']
# Name the column
data2.columns = ['checked']
# Adding columns using indices - This is additional work assuming may be columns will simplify than using multiIndex
data2['symbols'] = data2.index.get_level_values('symbol')
data2['Dates'] = data2.index.get_level_values('Date')
## Some of the answer on stackoverflow suggested sorting
dividends_csv.sort_values(by=['symbols', 'Dates'], inplace=True)
data2.sort_values(by=['symbols','Dates'], inplace=True)
# This through an error
dividends_csv.loc[ (dividends_csv['symbols'] == data2['symbols'] ) amp;
(dividends_csv['Dates'] == data2['Dates']), 'AuditRate3' ] = data2['checked']
## Merging - Merging is suplicating values
df = dividends_csv.merge(data2, on =["symbols"])
Если я запущу это :
# This through an error
dividends_csv.loc[ (dividends_csv['symbols'] == data2['symbols'] ) amp;
(dividends_csv['Dates'] == data2['Dates']), 'AuditRate3' ] = data2['checked']
я получаю эту ошибку
raceback (most recent call last):
File "<input>", line 2, in <module>
File "H:EducationArrowArrow_reportsPortfolioAppvenvlibsite-packagespandascoreopscommon.py", line 65, in new_method
return method(self, other)
File "H:EducationArrowArrow_reportsPortfolioAppvenvlibsite-packagespandascoreops__init__.py", line 365, in wrapper
raise ValueError("Can only compare identically-labeled Series objects")
ValueError: Can only compare identically-labeled Series objects
Если я объединю два набора данных с помощью
df = dividends_csv.merge(data2, on =["symbols"])
Я получаю повторяющиеся значения
df
symbols Dates_x Amounts checked Dates_y
0 ABP.AX 12/30/2019 0:00 0.094500 0.094500 2019-12-30
1 ABP.AX 12/30/2019 0:00 0.094500 0.090500 2020-06-29
2 ABP.AX 6/29/2020 0:00 0.090500 0.094500 2019-12-30
3 ABP.AX 6/29/2020 0:00 0.090500 0.090500 2020-06-29
4 AZJ.AX 2/24/2020 0:00 0.137000 0.137000 2020-02-24
5 AZJ.AX 2/24/2020 0:00 0.137000 0.137000 2020-08-24
6 AZJ.AX 8/24/2020 0:00 0.137000 0.137000 2020-02-24
7 AZJ.AX 8/24/2020 0:00 0.137000 0.137000 2020-08-24
Я был бы признателен за любую помощь.
Спасибо