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

Python 返回空值的大型数据集上的Numpy Rate函数,python,pandas,numpy,spyder,Python,Pandas,Numpy,Spyder,我使用numpy利率函数模拟贷款的Excel利率 当处理我的数据帧的子集(一百万条记录)时,函数返回正确的结果 但是,当处理整个数据帧(超过1000万条记录)时,它会返回所有数据帧的null结果 这可能是内存问题吗?如果是这样,怎么解决呢? 我已经尝试过将数据分块并使用while/for循环进行计算,但这并没有解决问题 这起到了作用(但当我循环浏览1000万条记录时就没有了): 我正在努力让这一切顺利进行: df2['True_Effective_Rate'] = ((1+np.rate(df2

我使用numpy利率函数模拟贷款的Excel利率

当处理我的数据帧的子集(一百万条记录)时,函数返回正确的结果

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

这可能是内存问题吗?如果是这样,怎么解决呢? 我已经尝试过将数据分块并使用while/for循环进行计算,但这并没有解决问题

这起到了作用(但当我循环浏览1000万条记录时就没有了):

我正在努力让这一切顺利进行:

df2['True_Effective_Rate'] = ((1+np.rate(df2['LoanTerm'],-df2['Instalment'],df2['LoanAmount'],0))**12-1)*100
我看到过去也有人问过类似的问题,当其中一个参数输入不正确时,返回的所有值都是null


但是,我的数据帧没有0值。如何防止这种情况发生?

您可以使用“应用”每行计算一次该值,因此只有无效的行才会为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)
valid = df.loc[(df.Installment > 0) & (df.LoanTerm > 0)]
npf.rate(nper=valid.LoanTerm,pv=valid.LoanAmount,pmt=-1*valid.Installment,fv=0)