2017-10-30 2 views
1

Die neue Pandas-Version schreibt die TimeGrouper, so sollten wir die regulären Grouper verwenden.Pandas Grouper vs Zeit Grouper

Der alte Code:

df['column_name'].groupby(pd.TimeGrouper("M")).mean().plot() 

arbeitet in der alten Version von Pandas in Ordnung. Keine von:

df.groupby(pd.Grouper(key='column_name', freq="M")).mean().plot() 
df['column_name'].groupby(pd.Grouper(freq="M")).mean().plot() 

funktioniert in der neuen Version. Eiter ist der Schlüssel betrachtet, zu fehlen, oder Pandas beklagt:

Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Float64Index' 

bearbeiten

import pandas as pd 

df = pd.DataFrame({'column_name':['2017-01-01', '2017-01-02'], 
        'column_value':[1,3]}) 

df 

df.index = pd.DatetimeIndex(df.column_name) 

df.index 

# old version 
df['column_value'].groupby(pd.TimeGrouper("M")).mean().plot() 

# new version 
df.groupby(pd.Grouper(key='column_value', freq="M")).mean().plot() 
+0

Wenn die Schlüsselspalte kein Datetime ist, dann funktioniert Grouper mit Freq-Attribut nicht. – Dark

+0

Aber das galt schon für die alte Version. Also hätte das Code-Snippet überhaupt nicht funktionieren sollen? angenommen, dass der Index ein regulärer Bereichsindex wäre. –

+0

Oh Entschuldigung, ich stimme zu. Können Sie Beispieldaten hinzufügen, sodass wir versuchen, dieselben zu reproduzieren? – Dark

Antwort

1

Wie ich im Kommentartaste sagte sollten in Grouper Datetime sein. Timegrouper konvertiert es standardmäßig zu datetime, also verwende

df['column_name'] = pd.to_datetime(df['column_name']) 
# new version 
df.groupby(pd.Grouper(key='column_name', freq="M")).mean().plot()