Python numpy“财务irr函数返回”;ValueError:输入必须是秩1数组;
我有一个通过mySQL查询填充的数据帧。我把它转换成一个数组来计算irr。排序和groupby函数按预期工作,但我似乎无法避免这个错误。我看了这个,但它似乎不适用于我的情况 我试图传递一个列表、数据帧和熊猫表,但函数正在寻找一个数组,所以这就是我发送它的内容。在此方面的任何帮助都将不胜感激 谢谢Python numpy“财务irr函数返回”;ValueError:输入必须是秩1数组;,python,numpy,Python,Numpy,我有一个通过mySQL查询填充的数据帧。我把它转换成一个数组来计算irr。排序和groupby函数按预期工作,但我似乎无法避免这个错误。我看了这个,但它似乎不适用于我的情况 我试图传递一个列表、数据帧和熊猫表,但函数正在寻找一个数组,所以这就是我发送它的内容。在此方面的任何帮助都将不胜感激 谢谢 This is the dataset produced as the flows_by_year variable sum EffectiveDate
This is the dataset produced as the flows_by_year variable
sum
EffectiveDate
2017 -3660000.0
2018 -5520000.0
2019 -2460213.0
2020 1600000.0
import pandas as pd
import sqlite3
from sqlite3 import Error
import numpy_financial as npf
def IRR(fund, pool):
database = r'C:\Transaction_History.db'
conn = create_connection(database)
sql_flows = ('''SELECT EFFECTIVEDATE, TRANSACTIONAMOUNT FROM Trans_Hist WHERE FUND=''' +
'"' + fund + '"' + ' AND POOL=' + '"' + pool + '"' +
' AND (TRANSACTIONTYPE = "Funding" OR TRANSACTIONTYPE = "Cash");')
flows = pd.read_sql_query(sql_flows, conn, parse_dates=['EffectiveDate'])
flows.sort_values(by=['EffectiveDate'], inplace=True, ascending=True)
flows_by_year = flows.groupby(flows['EffectiveDate'].dt.year)['TransactionAmount'].agg(['sum'])
print(flows_by_year)
irr = round(npf.irr(flows_by_year.values), 4) * 100
irr = f'{irr:,.2f}'
print(irr)
return irr
从中,函数numpy\u financial.irr()
使用类似一维数组的对象。但是,您正在按年份传递流。值是二维的。使用np.square(按年流动.值)
或按年流动['sum']
演示:
[193]中的:导入熊猫作为pd
…:将numpy_financial作为npf导入
…:将numpy作为np导入
在[194]中:数据=np.asarray([(2017,-3660000.0),
...: (2018, -5520000.0),
...: (2019, -2460213.0),
...: (2020, 1600000.0)])
在[195]中:df=pd.DataFrame(数据,列=['EffectiveDate','sum'])
在[196]中:按年份流动=df.set\u索引('EffectiveDate')
在[197]中:按年值流动
Out[197]:
数组([-3660000.]),
[-5520000.],
[-2460213.],
[ 1600000.]])
在[198]中:np.挤压(按年流量值)
Out[198]:数组([-3660000.,-5520000.,-246013,1600000.)
在[199]中:按年流动[总和]
出[199]:
生效日期
2017.0 -3660000.0
2018.0 -5520000.0
2019.0 -2460213.0
2020.0 1600000.0
名称:sum,数据类型:float64
在[200]中:四舍五入(净现值内部收益率(净现值挤压(流量乘以年值)),4)*100
出[200]:-66.25
在[201]中:四舍五入(净现值、内部收益率(按年度[总和])流动),4)*100
Out[201]:-66.25
这场挤压赛堪称传奇。我肯定会在其他问题上做更多的调查。非常感谢你!!!!