Pandas DataFrame Spalte Zuordnung ValueError: Falsche Anzahl der Elemente übergeben

Ich habe ein Problem mit einem Skript, das funktionierte vor einem upgrade von Anaconda (also ein upgrade von pandas und numpy)

Ich habe einen DataFrame, dass ich möchte eine Spalte aus und multipliziert die Werte einer Spalte eines anderen DataFrame, sodass der Letzte Wert einer Spalte in einer neuen DataFrame. Wie ich sagte, es war der code funktioniert, bis ich ein Upgrade auf pandas 0.17.

class MarketOnClosePortfolio(Portfolio):
    def __init__(self, symbol, bars, signals, initial_capital=10000.0):
        self.symbol = symbol
        self.bars = bars
        self.signals = signals
        self.initial_capital = float(initial_capital)
        self.positions = self.generate_positions()

    def generate_positions(self):
        positions = pd.DataFrame(index=signals.index).fillna(0.0)
        positions[self.symbol] = signals['signal']*10

        return positions        

    def backtest_portfolio(self):
        portfolio = self.positions*self.bars['Close']
        pos_diff = self.positions.diff()

        portfolio = pd.DataFrame(index=signals.index)
        portfolio['holdings'] = (self.positions*self.bars['Close'])
        portfolio['cash'] = self.initial_capital - (pos_diff*self.bars['Close']).sum(axis=1).cumsum()

        portfolio['total'] = portfolio['cash'] + portfolio['holdings']
        portfolio['returns'] = portfolio['total'].pct_change()

        return portfolio

if __name__ == "__main__":
    portfolio = MarketOnClosePortfolio(symbol, bars, signals, initial_capital=10000.0)
    returns = portfolio.backtest_portfolio()

Mein Fehler kommt beim ausführen returns = portfolio.backtest_portfolio() Rückbezug auf portfolio['holdings'] = self.positions*self.bars['Close'] und gibt

ValueError: Falsche Anzahl der Elemente übergeben, 3509, Platzierung bedeutet 1.

selbst.Positionen hat dieser Auftritt (der index ist um 3600):

    Symbol
1    int
2    int
3    int

selbst.bars.In der Nähe hat dieses Aussehen (gleiche index-Größe selbst.Positionen):

    Close
1   float
2   float
3   float

Bin ich mit Blick auf etwas offensichtliches hier? Ich weiß, ich leite eine Serie und kein einzelner Wert, aber ich bin verwirrt, warum bin ich immer der "Platzierung bedeutet 1" aus.

Jede Hilfe wird sehr geschätzt.

  • selbst.Positionen ist ein dataframe in form von symbol index value seine über 3600 Zeilen lang.
  • Haben Sie versucht, selbst.Positionen.Form und sich selbst.bars['close'].Form? Sieht aus wie Sie erstellen portfolio zweimal, übrigens. Ich würde vermuten, dass self.bars['Close'] ist nur die Auswahl eines einzelnen Elements, möglicherweise durch row index im Gegensatz zu einem column wie Sie vielleicht beabsichtigen. Vielleicht möchten Sie versuchen self.bars.loc[:, 'Close']] statt.
  • ok. interessant. es sich von selbst.bars.Schließen.Form gibt (3559 ) aber wenn ich print(bars.head()) es hat alle erwarteten Werte. selbst.Positionen.die Form gibt den gleichen index-Wert mit 1 Spalte wie es sein sollte. (3559, 1)
  • Versuchen Sie zu vermehren self.bars.close mit allen columns im self.positions? Es ist ein bisschen Rätselraten ohne zu sehen, die data..
  • Ja, bin ich. selbst.Positionen hat nur eine Spalte (symbol) definieren Sie die Positionen in einer bestimmten Lager-symbol. Ich habe eine kleine Probe des Datenformats, das in der Frage
InformationsquelleAutor Grr | 2016-01-05
Schreibe einen Kommentar