大数据集上的Numpy Rate函数返回空值

时间:2019-03-26 22:33:07

标签: python pandas numpy spyder

我正在使用 numpy 利率功能来模拟贷款的 Excel利率功能。

当使用我的数据框的子集(100万条记录)时,该函数返回正确的结果。

但是,当处理整个数据框(超过1000万条记录)时,它会为所有结果返回 null 结果。

这可能是内存问题吗?如果是这样,如何解决? 我已经尝试对数据进行分块,并使用while / for循环进行计算,但这并不能解决问题。

这行得通(虽然我遍历了1000万条记录却没有):

test = df2.iloc[:1000000,:]
test = test.loc[:,['LoanTerm',Instalment,'LoanAmount']]
test['True_Effective_Rate'] = ((1+np.rate(test['LoanTerm'],-test['Instalment'],test['LoanAmount'],0))**12-1)*100

我正在尝试使其工作:

df2['True_Effective_Rate'] = ((1+np.rate(df2['LoanTerm'],-df2['Instalment'],df2['LoanAmount'],0))**12-1)*100

我看到过去曾经问过一个类似的问题,当其中一个参数输入不正确时,所有返回的值都为空。

Using numpy.rate, on numpy array returns nan's unexpectedly

我的数据框虽然没有0值。如何防止这种情况发生?

1 个答案:

答案 0 :(得分:0)

您可以使用 apply 对每行计算一次此值,因此只有无效行会是 nan,而不是整个结果。

import pandas as pd
import numpy_financial as npf # i get a warning using np.rate
i = {
 'LoanAmount': [5_000,20_000,15_000, 50_000.0, 14_000,1_000_000,10_000],
 'LoanTerm': [72, 12,60, 36,72,12,-1],
 'Instalment': [336.0,5000.0,333.0,0.0,-10,1000.0,20],}
df = pd.DataFrame(i)
df.apply(lambda x: npf.rate(nper=x.LoanTerm,pv=x.LoanAmount,pmt=-1*x.Instalment,fv=0),axis=1)

对于大型数据集,这会更慢,因为您无法利用矢量化。

您还可以将数据框条目过滤为仅有效值。很难重现无效的内容,因为您没有共享输入,但在我上面的示例中,贷款期限和分期付款都必须 > 0。

valid = df.loc[(df.Installment > 0) & (df.LoanTerm > 0)]
npf.rate(nper=valid.LoanTerm,pv=valid.LoanAmount,pmt=-1*valid.Installment,fv=0)