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

Numpy Rate function on large dataset returning nulls

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

函数 returns 使用我的数据框的一个子集(100 万条记录)时的正确结果。

但是,当处理整个数据框(超过 1000 万条记录)时,它 returns 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 值。我怎样才能防止这种情况发生?

您可以使用 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)