J'ai un Pandas DataFrame avec une colonne 'date'. Maintenant, je dois filtrer toutes les lignes du DataFrame dont la date est en dehors des deux prochains mois. Pour l’essentiel, il me suffit de conserver les lignes qui se trouvent dans les deux prochains mois.
Quel est le meilleur moyen d'y parvenir?
Si la colonne de date est l'index , utilisez alors .loc pour l'indexation basée sur une étiquette ou .iloc pour l'indexation positionnelle.
Par exemple:
df.loc['2014-01-01':'2014-02-01']
Voir les détails ici http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection
Si la colonne est et non l'index , vous avez deux choix:
df[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
Voir ici pour l'explication générale
Remarque: .ix est obsolète.
La réponse précédente n'est pas correcte dans mon expérience, vous ne pouvez pas lui passer une chaîne simple, il faut que ce soit un objet datetime. Alors:
import datetime
df.loc[datetime.date(year=2014,month=1,day=1):datetime.date(year=2014,month=2,day=1)]
Et si vos dates sont normalisées en important un package datetime, vous pouvez simplement utiliser:
df[(df['date']>datetime.date(2016,1,1)) & (df['date']<datetime.date(2016,3,1))]
Pour standardiser votre chaîne de date à l'aide du package datetime, vous pouvez utiliser cette fonction:
import datetime
datetime.datetime.strptime
Si votre colonne datetime a le type Pandas datetime (par exemple datetime64[ns]
), vous avez besoin du objet pd.Timestamp , par exemple:
from datetime import date
import pandas as pd
value_to_check = pd.Timestamp(date.today().year, 1, 1)
filter_mask = df['date_column'] < value_to_check
filtered_df = df[filter_mask]
Si les dates sont dans l'index, alors simplement:
df['20160101':'20160301']
Vous pouvez utiliser pd.Timestamp pour effectuer une requête et une référence locale
import pandas as pd
import numpy as np
df = pd.DataFrame()
ts = pd.Timestamp
df['date'] = np.array(np.arange(10) + datetime.now().timestamp(), dtype='M8[s]')
print(df)
print(df.query('date > @ts("20190515T071320")')
avec la sortie
date
0 2019-05-15 07:13:16
1 2019-05-15 07:13:17
2 2019-05-15 07:13:18
3 2019-05-15 07:13:19
4 2019-05-15 07:13:20
5 2019-05-15 07:13:21
6 2019-05-15 07:13:22
7 2019-05-15 07:13:23
8 2019-05-15 07:13:24
9 2019-05-15 07:13:25
date
5 2019-05-15 07:13:21
6 2019-05-15 07:13:22
7 2019-05-15 07:13:23
8 2019-05-15 07:13:24
9 2019-05-15 07:13:25