fmilthaler / FinQuant

A program for financial portfolio management, analysis and optimisation.
MIT License
1.4k stars 199 forks source link

Error when trying build_portfolio example #135

Closed pythonian1027 closed 3 months ago

pythonian1027 commented 3 months ago

I noticed that this repo hasn't been updated since June 2023, I am getting an error with DataFrame append, this is the code:

from finquant.portfolio import build_portfolio names = ['GOOG', 'AMZN'] start_date = '2020-01-01' end_date = '2021-12-31' pf = build_portfolio(names=names, start_date=start_date, end_date=end_date, data_api='yfinance')

And this is the error I am getting:


AttributeError Traceback (most recent call last) /tmp/ipykernel_124653/843295701.py in ?() ----> 5 from finquant.portfolio import build_portfolio 6 names = ['GOOG', 'AMZN'] 7 start_date = '2020-01-01' 8 end_date = '2021-12-31'

~/finquant/portfolio.py in ?(kwargs) 1166 raise ValueError( 1167 input_comb_error.format(complement_input_args, allowed_mandatory_args) 1168 ) 1169 # get portfolio: -> 1170 pf = _build_portfolio_from_api(kwargs) 1171 1172 # 2. pf_allocation, data 1173 allowed_mandatory_args = ["data"]

~/finquant/portfolio.py in ?(names, pf_allocation, start_date, end_date, data_api) 935 # check pf_allocation: 936 if pf_allocation is None: 937 pf_allocation = _generate_pf_allocation(names=names) 938 # build portfolio: --> 939 pf = _build_portfolio_from_df(data, pf_allocation) 940 return pf

~/finquant/portfolio.py in ?(data, pf_allocation, datacolumns) 1047 # if only one data column per stock exists, give dataframe a name 1048 if len(datacolumns) == 1: 1049 stock_data.name = datacolumns[0] 1050 # create Stock instance and add it to portfolio -> 1051 pf.add_stock(Stock(pf_allocation.loc[i], data=stock_data)) 1052 return pf

~/finquant/portfolio.py in ?(self, stock) 256 """ 257 # adding stock to dictionary containing all stocks provided 258 self.stocks.update({stock.name: stock}) 259 # adding information of stock to the portfolio --> 260 self.portfolio = self.portfolio.append(stock.investmentinfo, ignore_index=True) 261 # setting an appropriate name for the portfolio 262 self.portfolio.name = "Allocation of stocks" 263 # also add stock data of stock to the dataframe

~/dev/lib/python3.9/site-packages/pandas/core/generic.py in ?(self, name) 6292 and name not in self._accessors 6293 and self._info_axis._can_hold_identifiers_and_holds_name(name) 6294 ): 6295 return self[name] -> 6296 return object.getattribute(self, name)

AttributeError: 'DataFrame' object has no attribute 'append'