我的数据框有35,000行,我知道这不是很多,但是我有一个函数接受行并产生一些输出。该函数调用另一个程序的后端,问题是该程序非常慢。在数据框中的一列上运行我的函数需要8到10个小时。
我想将数据帧分成多个块,并保存每个块的输出,以便我可以在代码中断或计算机决定重新启动等情况下从中断的地方继续工作。
这是我的功能:
def yield_calc(price):
special= rows.reset_index(drop=True)
n=np.shape(special)[0]
TradeDate = rows['trade_date']
CUSIP = rows['cusip']
Price = rows[price]
YTW=[0]*n
req=[]
for i in range(0,n):
time=TradeDate[i]
cusip=CUSIP[i]
price=Price[i]
#rename the parameters
globals()['params'+str(i)] = {'pricer': {'asset_id': cusip,
'price': price, 'ANAL_DATE': time, 'Yield Curve':'DEM Govt'},
'metrics': [ 'Yield']} #percentage
globals()/
['req'+str(i)]=Request('req'+str(i),'aladdin.anser',eval('params'+str(i)))
req.append(eval('req'+str(i)))
dfs=ATP.get_data_batch(req)
for i in range(0,n):
key='req'+str(i)
if dfs[key].output is None:
YTW[i]=float('NaN')
else:
YTW[i]=dfs[key].output['Yield'][0]
return(YTW)
数据帧称为“行”,我使用的列是rows [price],在执行函数时,我在其中调用列的名称。列是rows ['trade_price']和rows ['benchmark_derived_price'],我使用的函数是这样的:
df1 = yield_calc('trade_price')
df2 = yield_calc('benchmark_price_derived')