2016-07-22 13 views
1

Ich habe einen Pandas DataFrame mit einem täglichen DatetimeIndex. Ich versuche, die Resampling-Methode anzuwenden, wie dies die Werte in einer monatlichen Serie zusammenzufassen:Reindex Methode von Pandas nicht die eingestellte Frequenz

>>> aggVols.resample('M',axis=1).sum() 

Aber wenn ich das versuche ich den Fehler

TypeError: Only valid with DatetimeIndex or PeriodIndex 

Ich bemerkte, dass die Frequenz des Index des Objekts ist nicht festgelegt (None).

>>>aggVols.index 
<class 'pandas.tseries.index.DatetimeIndex'> 
[2016-01-04, ..., 2016-07-01] 
Length: 130, Freq: None, Timezone: None 

Also habe ich zuerst die Frequenz täglich (Werktag) und den Index zurücksetzen, damit ich resample anwenden können:

>>> aggVols = aggVols.reindex(aggVols.asfreq('B').index) 
>>> aggVols.index 
<class 'pandas.tseries.index.DatetimeIndex'> 
[2016-01-04, ..., 2016-07-01] 
Length: 130, Freq: B, Timezone: None 

Aber ich bin immer noch die gleichen Fehler unserer der Resampling-Funktion :

TypeError: Only valid with DatetimeIndex or PeriodIndex 

Was ist falsch mit dem Index? Warum ist es nicht gültig? Ich bekomme den gleichen Fehler, wenn ich die Frequenz auf D setze.

Danke!

+0

Bitte senden Sie ein Beispiel für den DataFrame. – Alex

Antwort

0

ändern

aggVols.resample('M',axis=1).sum() 

zu

aggVols.resample('M',axis=0).sum() 

Ihre DatetimeIndex ist in den Zeilen (nicht die Spalten).

Im Allgemeinen Achse 0 ist die Zeilen, Achse 1 ist die Spalten, Achse 2 ist die Höhe und Achsen 3-N ... naja, sie sind abstrakter gedacht.

Siehe Abschnitt "entlang einer Achse" von the NumPy docs.

+0

Danke für die Antwort. Sie haben Recht, DatetimeIndex ist für die Zeilen (nicht die Spalten). Also könnte ich tatsächlich die falsche Achse angeben. Aber was Sie vorschlagen, geben Sie mir eine einzige Zahl pro Kolumne. Es produziert keine monatliche Serie. '>>> aggVols.resample (' M‘, Achse = 0) .sum() CMX 114.237,608293 LME 1.425.516,887879 SHF 50.861.180,513820 dtype: float64' – David

+0

@ David Sie über die Reihen der Datenrahmen summieren möchten? – Alex

+0

@David hilft es, wenn Sie einen Beispieldatenrahmen und Ihr gewünschtes Ergebnis veröffentlichen. – Alex

0

Haben Sie es am Ende. Benutzte die Methode am Ende mit der Operation falsch, als wäre es eine Serie. Der richtige Code lautet:

aggVols.resample('M',axis=0,how=sum)