web-dev-qa-db-fra.com

Pandas filtrer les lignes de trame de données avec une année spécifique

J'ai un dataframe df et il a une colonne Date. Je veux créer deux nouveaux blocs de données. Une qui contient toutes les lignes de df où l'année est égale à some_year et un autre bloc de données qui contient toutes les lignes de df où l'année n'est pas égale some_year. Je sais que tu peux faire df.ix['2000-1-1' : '2001-1-1'] mais pour obtenir toutes les lignes qui ne sont pas en 2000, il faut créer 2 trames de données supplémentaires, puis les concaténer/les joindre.

Y a-t-il un moyen comme ça?

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

Ce code ne fonctionne pas, mais existe-t-il un moyen similaire?

13
user3494047

Vous pouvez utiliser l'accesseur datetime.

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]
20
Vaishali

Vous pouvez le simplifier en inversant le masque par ~ et pour l'utilisation des conditions Series.dt.year avec int pour la chaîne de transtypage year:

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