Question: Why does the first code not provide a two dimensional array for the Daily returns, while the second one does? What would I need to
Why does the first code not provide a two dimensional array for the Daily returns, while the second one does? What would I need to do to correct it so that it does work?
All code is in Python.
Code 1:
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from pandas_datareader import data import datetime import yfinance as yf
Symbols=['AAPL', 'ABBV', 'AXP', 'BAC', 'DIA', 'EPD', 'EWT', 'EWU', 'EWZ', 'GS', 'HD', 'JEPI', 'KO', 'LMT', 'MMM', 'MSFT', 'NVDA', 'O', 'PG', 'RCI', 'RIO', 'SPY', 'TGT', 'TSM', 'XLE', 'XOM'] start = datetime.datetime(2020,2,24) end = datetime.datetime(2023,2,24) # create empty dataframe stock_final = pd.DataFrame() # iterate over each symbol for i in Symbols: # print the symbol which is being downloaded print( str(Symbols.index(i)) + str(' : ') + i, sep=',', end=',', flush=True) try: # download the stock price stock = [] stock = yf.download(i,start=start, end=end, progress=False) # append the individual stock prices if len(stock) == 0: None else: stock['Name']=i stock_final = stock_final.append(stock,sort=False) except Exception: None
Stocks=stock_final['Name'].unique().tolist() for name in Stocks: globals()[name]=stock_final.loc[stock_final['Name']==name]
Companies=[AAPL,ABBV,AXP,BAC,DIA,EPD,EWT,EWU,EWZ,GS,HD,JEPI,KO,LMT,MMM, MSFT,O,PG,RCI,RIO,SPY,TGT,TSM,XLE,XOM,NVDA]
for i in range(len(Companies)): Companies[i]['Daily Returns'] = Companies[i]['Adj Close'].pct_change() Dail=Companies[i]['Daily Returns'].dropna() sns.displot(Dail, bins=50, color='blue', kde=True) plt.title(Symbols[i]) plt.show()
stock_returns = pd.DataFrame(data=np.array([data['Daily Returns'] for data in Companies]).T, columns=Symbols) stock_returns.head() Companies[i]['Daily Returns'].dropna()
Code 2:
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from pandas_datareader import data import datetime import yfinance as yf
start = datetime.datetime(2011,9,1) end = datetime.datetime(2022,3,4)
start1=datetime.datetime(2022,3,5) end1=datetime.datetime(2022,10,19)
Symbols=['AAPL','TSLA','NVDA','GOOGL','BRK-B','AMZN','O','AMT','INTC','JNJ', 'GME','SRGHY','MSFT','COST', 'AA','X','OXY','PG','AMD','HD','V','UPS', 'HMC','GS','PEP','LMT','UL','IBM','KO','OKE']
Symbols.sort()
# create empty dataframe stock_final = pd.DataFrame() # iterate over each symbol for i in Symbols: # print the symbol which is being downloaded print( str(Symbols.index(i)) + str(' : ') + i, sep=',', end=',', flush=True) try: # download the stock price stock = [] stock = yf.download(i,start=start, end=end, progress=False) # append the individual stock prices if len(stock) == 0: None else: stock['Name']=i stock_final = stock_final.append(stock,sort=False) except Exception: None Stocks=stock_final['Name'].unique().tolist() for name in Stocks: globals()[name]=stock_final.loc[stock_final['Name']==name] BRKB=stock_final.loc[stock_final['Name']=='BRK-B']
Companies=[AA,AAPL,AMD,AMT,AMZN,BRKB,COST,GME,GOOGL,GS,HD,HMC,IBM,INTC,JNJ, KO,LMT,MSFT,NVDA,O,OKE,OXY,PEP,PG,SRGHY,TSLA,UL,UPS,V,X]
for i in range(len(Companies)): Companies[i]['Daily Returns'] = Companies[i]['Adj Close'].pct_change() Dail=Companies[i]['Daily Returns'].dropna() sns.displot(Dail, bins=50, color='blue', kde=True) plt.title(Symbols[i]) plt.show()
stock_returns = pd.DataFrame(data=np.array([data['Daily Returns'] for data in Companies]).T, columns=Symbols) stock_returns.head() Companies[i]['Daily Returns'].dropna()
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
