我有一份截至15年(即1999年12月31日至2015年12月31日)的标准普尔500指数的csv文件。因此,dataframe有15列holdings。我正试图编写一个代码,将循环通过每一列持有,采取这些持有和收集价格数据在多个点(即当前,3个月从当前期间和6个月从当前期间)。当前期间始终是循环通过的特定列的标题(例如12/31/2014)。你知道吗
我正在使用数据阅读器与财务雅虎拉价格数据。我正在努力找到最有效的方法。一个挑战是,financeyahoo API需要一个日期作为交易日期(即不能是周末)。因此,我使用try/excepts来尝试这个日期,如果它不起作用,就返回一天。我这样做了4次,因为这应该足够到一个交易日。我想知道这是不是让它慢了很多。有没有更有效的方法?我还没有得到运行整个15年的代码,因为它需要半小时做一年,当我试图一夜之间崩溃。你知道吗
equities = (sample data is below)
prices = DataFrame()
for col in equities.columns[16:18]:
temp = DataFrame(equities[col])
temp.rename(columns={col:'ticker'},inplace=True)
date = datetime.datetime.strptime(col,'%m/%d/%Y').strftime('%Y-%m-%d')
temp = DataFrame(temp['ticker'].dropna())
temp = DataFrame(temp['ticker'].map(lambda x :str(x)[:-3]))
temp['calendardate'] = date
datetemp = datetime.datetime.strptime(date, '%Y-%m-%d')
splicestart = 0
splicenum = None
try:
datecur = datetemp
tempprice = DataFrame(
DataReader(temp['ticker'][splicestart:splicenum], 'yahoo', datecur, datecur)['Adj Close']).transpose()
temp = temp.merge(DataFrame(tempprice[datecur]), how='outer', left_on=temp['ticker'], right_index=True)
temp.rename(columns={datecur: 'current'}, inplace=True)
except:
try:
datecur = datetime.datetime(datecur.year,datecur.month,datecur.day-1)
tempprice = DataFrame(
DataReader(temp['ticker'][splicestart:splicenum], 'yahoo', datecur, datecur)['Adj Close']).transpose()
temp = temp.merge(DataFrame(tempprice[datecur]), how='outer', left_on=temp['ticker'], right_index=True)
temp.rename(columns={datecur: 'current'}, inplace=True)
我在那个特定的时间段做了一些尝试/例外,然后晚了3个月重复(见下面的代码):
try:
datecur = datetime.datetime(datetemp.year + 1, datetemp.month - 9, datetemp.day)
tempprice = DataFrame(
DataReader(temp['ticker'][splicestart:splicenum], 'yahoo', datecur, datecur)['Adj Close']).transpose()
temp = temp.merge(DataFrame(tempprice[datecur]), how='outer', left_on=temp['ticker'], right_index=True)
temp.rename(columns={datecur: '3month'}, inplace=True)
except:
try:
datecur = datetime.datetime(datecur.year, datecur.month, datecur.day - 1)
tempprice = DataFrame(
DataReader(temp['ticker'][splicestart:splicenum], 'yahoo', datecur, datecur)['Adj Close']).transpose()
temp = temp.merge(DataFrame(tempprice[datecur]), how='outer', left_on=temp['ticker'], right_index=True)
temp.rename(columns={datecur: '3month'}, inplace=True)
同样,还有2次尝试/例外是在换班前1天完成的。你知道吗
非常感谢您的帮助!你知道吗
12/31/2012,12/31/2013,12/31/2014,12/31/2015
A UN,A UN,A UN,A UN
AA UN,AA UN,AA UN,AA UN
AAPL UW,AAPL UW,AAPL UW,AAL UW
ABC UN,ABBV UN,ABBV UN,AAP UN
ABT UN,ABC UN,ABC UN,AAPL UW
ACN UN,ABT UN,ABT UN,ABBV UN
ADBE UW,ACN UN,ACN UN,ABC UN
ADI UW,ADBE UW,ADBE UW,ABT UN
ADM UN,ADI UW,ADI UW,ACN UN
ADP UW,ADM UN,ADM UN,ADBE UW
ADSK UW,ADP UW,ADP UW,ADI UW
ADT UN,ADS UN,ADS UN,ADM UN
AEE UN,ADSK UW,ADSK UW,ADP UW
AEP UN,ADT UN,ADT UN,ADS UN
AES UN,AEE UN,AEE UN,ADSK UW
AET UN,AEP UN,AEP UN,ADT UN
AFL UN,AES UN,AES UN,AEE UN
AGN UN,AET UN,AET UN,AEP UN
AIG UN,AFL UN,AFL UN,AES UN
熊猫有工作日指数(不包括周末) http://pandas.pydata.org/pandas-docs/stable/timeseries.html
您可以生成如下示例所示的工作日:
相关问题 更多 >
编程相关推荐