Il y a deux solutions possibles:
- Utilisez un masque booléen, puis utilisez
df.loc[mask]
- Définissez la colonne de date comme DatetimeIndex, puis utilisez
df[start_date : end_date]
Utilisation d'un masque booléen :
S'assurer df['date']
est une série avec dtype datetime64[ns]
:
df['date'] = pd.to_datetime(df['date'])
Faites un masque booléen. start_date
et end_date
peut être datetime.datetime
s,
np.datetime64
s, pd.Timestamp
s ou même des chaînes datetime:
#greater than the start date and smaller than the end date
mask = (df['date'] > start_date) & (df['date'] <= end_date)
Sélectionnez le sous-DataFrame:
df.loc[mask]
ou réattribuer à df
df = df.loc[mask]
Par exemple,
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.random((200,3)))
df['date'] = pd.date_range('2000-1-1', periods=200, freq='D')
mask = (df['date'] > '2000-6-1') & (df['date'] <= '2000-6-10')
print(df.loc[mask])
rendements
0 1 2 date
153 0.208875 0.727656 0.037787 2000-06-02
154 0.750800 0.776498 0.237716 2000-06-03
155 0.812008 0.127338 0.397240 2000-06-04
156 0.639937 0.207359 0.533527 2000-06-05
157 0.416998 0.845658 0.872826 2000-06-06
158 0.440069 0.338690 0.847545 2000-06-07
159 0.202354 0.624833 0.740254 2000-06-08
160 0.465746 0.080888 0.155452 2000-06-09
161 0.858232 0.190321 0.432574 2000-06-10
Utilisation d'un DatetimeIndex :
Si vous comptez effectuer de nombreuses sélections par date, il peut être plus rapide de définir d'abord la
date
colonne comme index. Ensuite, vous pouvez sélectionner des lignes par date en utilisant
df.loc[start_date:end_date]
.
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.random((200,3)))
df['date'] = pd.date_range('2000-1-1', periods=200, freq='D')
df = df.set_index(['date'])
print(df.loc['2000-6-1':'2000-6-10'])
rendements
0 1 2
date
2000-06-01 0.040457 0.326594 0.492136 # <- includes start_date
2000-06-02 0.279323 0.877446 0.464523
2000-06-03 0.328068 0.837669 0.608559
2000-06-04 0.107959 0.678297 0.517435
2000-06-05 0.131555 0.418380 0.025725
2000-06-06 0.999961 0.619517 0.206108
2000-06-07 0.129270 0.024533 0.154769
2000-06-08 0.441010 0.741781 0.470402
2000-06-09 0.682101 0.375660 0.009916
2000-06-10 0.754488 0.352293 0.339337
Alors que l'indexation de liste Python, par exemple seq[start:end]
inclut start
mais pas end
, en revanche, Pandas df.loc[start_date : end_date]
inclut les deux points d'extrémité dans le résultat s'ils sont dans l'index. Cependant, ni l'un start_date
ni l' autre ne end_date
doivent figurer dans l'index.
Notez également que pd.read_csv
possède un parse_dates
paramètre que vous pouvez utiliser pour analyser la date
colonne en tant que datetime64
s. Ainsi, si vous utilisez parse_dates
, vous n'aurez pas besoin d'utiliser df['date'] = pd.to_datetime(df['date'])
.