【发布时间】:2021-10-14 21:41:56
【问题描述】:
在 Python 中,我使用了一个循环,并在所附代码的末尾第 6 行( Portfolio_1_4 = Portfolio_1_4 * SP1500DailyReturns.loc[n_short, 'S&P 1500 SUPER COMPOSITE - PRICE INDEX'] / SP1500DailyReturns.loc[str(Portfolio_1_4_Date_sell_short ), 'S&P 1500 SUPER COMPOSITE - PRICE INDEX']) 我收到一个关键错误。出现此错误是因为 SP1500DailyReturns 中不存在某些日期信息,因此代码无法获取它进行计算。
怎么可能修改我的算法,以便当这条线遇到关键错误时,它会从循环中的前一个位置(n-1)获取日期?
例如日期,“n_short”不存在,然后算法从日期“n_short - 1”获取数据,而不是日期“Portfolio_1_4_Date_sell_short”的数据不存在,然后算法获取数据日期“Portfolio_1_4_Date_sell_short -1”。
谢谢!
for n in dates:
n_short = n[:10]
Date_Buy = pd.Timestamp(n)
Date_sell = Date_Buy + pd.Timedelta("30 days")
Date_buy_SP1500 = Date_sell
Date_sell_SP1500 = Date_Buy
if (Test_set.loc[n, '4_signals'] == 1):
if (Portfolio_1_4_Date_sell < pd.Timestamp(Test_set.loc[n, 'feedTimestamp'])):
Portfolio_1_4 = Portfolio_1_4 * Test_set.loc[n, 'Cumulative stock Returns over the 30 days after transaction (22 working days)'] # For 5 days i will have to change to 5 days column later
Test_set.loc[n, 'Portfolio_1_4'] = Portfolio_1_4
Portfolio_1_4_Date_sell = Date_Buy + pd.Timedelta("30 days")
Portfolio_1_4_Date_sell_short = Portfolio_1_4_Date_sell.strftime("%Y-%m-%d")
Portfolio_2_4 = Portfolio_2_4
Test_set.loc[n, 'Portfolio_2_4'] = Portfolio_2_4
Portfolio_3_4 = Portfolio_3_4
Test_set.loc[n, 'Portfolio_3_4'] = Portfolio_3_4
else:
Portfolio_1_4 = Portfolio_1_4 * SP1500DailyReturns.loc[n_short, 'S&P 1500 SUPER COMPOSITE - PRICE INDEX'] / SP1500DailyReturns.loc[Portfolio_1_4_Date_sell_short, 'S&P 1500 SUPER COMPOSITE - PRICE INDEX']
Test_set.loc[n, 'Portfolio_1_4'] = Portfolio_1_4
Portfolio_2_4 = Portfolio_2_4
Test_set.loc[n, 'Portfolio_2_4'] = Portfolio_2_4
Portfolio_3_4 = Portfolio_3_4
Test_set.loc[n, 'Portfolio_3_4'] = Portfolio_3_4
【问题讨论】: