pandas - How can I apply a couple of functions to multiple tickers in a list? (Code improvement) -


so i'm learning how analyse financial data in python using numpy, pandas, etc... , i'm starting off small script rank chosen equities price change between 2 chosen dates. first script was:

import numpy np import pandas pd pandas_datareader import data web pandas import series, dataframe import datetime operator import itemgetter  #edit below 2 dates wish calculate: start = datetime.datetime(2014, 7, 15) end = datetime.datetime(2017, 7, 25)  stocks = ('aapl', 'googl', 'yhoo', 'msft', 'amzn', 'dai')  #getting data:     aapl = web.datareader('aapl', 'google', start, end) googl = web.datareader('googl', 'google', start, end) yhoo = web.datareader('yhoo', 'google', start, end) msft = web.datareader('msft', 'google', start, end) amzn = web.datareader('amzn', 'google', start, end) dai = web.datareader('dai', 'google', start, end)  #calculating change: aaplkey = (aapl.ix[start]['close'])/(aapl.ix[end]['close']) googlkey = (googl.ix[start]['close'])/(googl.ix[end]['close']) yhookey = (yhoo.ix[start]['close'])/(yhoo.ix[end]['close']) msftkey = (msft.ix[start]['close'])/(msft.ix[end]['close']) amznkey = (amzn.ix[start]['close'])/(amzn.ix[end]['close']) daikey = (dai.ix[start]['close'])/(dai.ix[end]['close'])  #formatting output in sorted order: dict1 = {"aapl" : aaplkey, "googl" : googlkey, "yhoo" : yhookey, "msft" : msftkey, "amzn" : amznkey, "dai" : daikey}  out = sorted(dict1.items(), key=itemgetter(1), reverse = true)  tick , change in out:     print (tick,"\t", change) 

i want make far shorter , i've got far:

import numpy np import pandas pd pandas_datareader import data web pandas import series, dataframe import datetime operator import itemgetter  #edit below 2 dates wish calculate: start = datetime.datetime(2014, 7, 15) end = datetime.datetime(2017, 7, 25)  stocks = ('aapl', 'googl', 'yhoo', 'msft', 'amzn', 'dai')  eq in stocks:     eq = web.datareader(eq, 'google', start, end)  legend in eq:     legend = (eq.ix[start]['close'])/(eq.ix[end]['close'])  print (legend) 

the calculation works problem outputs last value item in list (dai). what's next in order same result first code?

you can move print statement loop.

like:

for legend in eq:     legend = (eq.loc[start]['close'])/(eq.loc[end]['close'])     print(legend) 

improved answer: rid of label loop , print values previous loop:

for eq in stocks:     df = web.datareader(eq, 'google', start, end)     print((df.loc[start]['close'])/(df.loc[end]['close'])) 

Comments

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -