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
Post a Comment