2017-10-22 2 views
1

Ich habe einen Datenrahmen df und es hat eine Date Spalte. Ich möchte zwei neue Datenrahmen erstellen. Eine, die alle Zeilen von df enthält, wobei das Jahr some_year entspricht, und ein anderer Datenrahmen, der alle Zeilen von df enthält, wobei das Jahr nicht gleich some_year ist. Ich weiß, dass Sie df.ix['2000-1-1' : '2001-1-1'] tun können, aber um alle Zeilen zu erhalten, die nicht in 2000 sind, müssen Sie zwei zusätzliche Datenframes erstellen und dann verketten/verbinden.Pandas Filter Datenrahmen Zeilen mit einem bestimmten Jahr

Gibt es einen Weg wie diesen?

include = df[df.Date.year == year] 
exclude = df[df['Date'].year != year] 

Dieser Code funktioniert nicht, aber gibt es einen ähnlichen Weg?

Antwort

3

Sie Datumzeit Accesor verwenden können.

import datetime as dt 
df['Date'] = pd.to_datetime(df['Date']) 

include = df[df['Date'].dt.year == year] 
exclude = df[df['Date'].dt.year != year] 
+0

Hallo Vaishali. Wenn ich das versuche, mit 'year' als Integer-Wert, bekomme ich' TypeError: invalid type comparison'. Was sollte die Art von "Jahr" sein? – user3494047

+0

In Zeile 2 fehlt eine Klammer – Moritz

1

Sie können es vereinfachen, indem Maske durch ~ Umdrehen und für Zustand Verwendung Series.dt.year mit int für Guss String year:

mask = df['Date'].dt.year == int(year) 
include = df[mask] 
exclude = df[~mask] 
+0

Hallo @jezrael. Ich habe den gleichen Kommentar wie für die andere Antwort. Wenn ich diese 'mask = df.Date.dt.year == Jahr versuche, bekomme ich 'TypeError: ungültiger Typvergleich'. Meine 'Jahr'-Variable ist ein int. Könnte das das Problem sein? – user3494047

+0

Ich habe das schon gemacht. Aber ich habe es gerade nochmal versucht und ich bekomme den gleichen Fehler. Wenn ich df.Date mache, druckt es 'dtype: datetime64 [ns]' – user3494047

+0

x | Ich habe gerade festgestellt. Mein Jahr ist ein String nicht und int. Es tut uns leid. Ich habe ein int Jahr benutzt und jetzt funktioniert es. Es tut uns leid. – user3494047

Verwandte Themen