def createPriceHistoryReport(self, stock):
"""
Calls get10YrPriceHistory() to package a price history report into a PANDAS dataframe, then cleans and returns the data.
This function will acquire a price history for the provided symbol, which must be a string and a valid stock symbol
along with the symbol's exchange, e.g., ('MMM', 'NYSE'). The get10YrPriceHistory() function requires the exchange.
After the data is loaded, the function adds a Symbol field to the price history for tracking in the database, reindexes
and renames some fields, properly formats the dates into datetime fields, and converts prices from strings to floats.
Returns the report as a PANDAS dataframe if successful, otherwise a tuple (False, error message).
Example Usage: createPriceHistoryReport(('MMM', 'NYSE'))
"""
try:
# get the raw data from morningstar
price_history = self.get10YrPriceHistory(stock)
if isinstance(price_history, pd.DataFrame): # the price_history has to exist, or else return the err msg of the function called
price_history['Symbol'] = stock[0]
# reorganize header order
price_history = price_history.reindex(columns=['Symbol','Date','Open','High','Low','Close','Volume'])
# rename the Date column for easier processing through SQLite's Date functionality
price_history.rename(columns={'Date':'Reference'}, inplace=True)
# convert all dates to ISO formatted yyyy-mm-dd strings
price_history['Reference'] = price_history['Reference'].apply(lambda x: time.strftime("%Y-%m-%d", time.strptime(x, "%m/%d/%Y")))
# convert volumes to integers # unicode err on ??? value for some volumes goes to NaN
price_history['Volume'] = pd.to_numeric(price_history['Volume'].str.replace(',',''), errors='coerce')
# set index b/f db commit so no duplicate numeric index columns
price_history.set_index(['Symbol'], inplace=True)
return price_history
except Exception as e:
return (False, e)
# get10YrPriceHistory
# ******************* #
评论列表
文章目录