J'ai un Pandas DataFrame avec une colonne «date». Maintenant, je dois filtrer toutes les lignes du DataFrame qui ont des dates en dehors des deux prochains mois. Essentiellement, je n'ai besoin de conserver que les lignes qui se trouvent dans les deux prochains mois.
Quelle est la meilleure façon d'y parvenir?
query
ici.df.query('20130101 < date < 20130201')
..loc
et.ix
) et de colonnes dans vos exemples ne sont pas équivalents.df.ix['2014-01-01':'2014-02-01']
inclut2014-02-01
tandis quedf[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
n'inclut pas2013-02-01
, il ne correspondra qu'aux lignes jusqu'à2013-01-31
.La réponse précédente n'est pas correcte dans mon expérience, vous ne pouvez pas lui passer une simple chaîne, doit être un objet datetime. Alors:
la source
Et si vos dates sont standardisées en important le package datetime, vous pouvez simplement utiliser:
Pour standardiser votre chaîne de date à l'aide du package datetime, vous pouvez utiliser cette fonction:
la source
df[(df['date']>pd.Timestamp(2016,1,1)) & (df['date']<pd.Timestamp(2016,3,1))]
.Si votre colonne datetime a le type de datetime Pandas (par exemple
datetime64[ns]
), pour un filtrage approprié, vous avez besoin de l' objet pd.Timestamp , par exemple:la source
Si les dates sont dans l'index, alors simplement:
la source
Vous pouvez utiliser pd.Timestamp pour effectuer une requête et une référence locale
avec la sortie
Jetez un œil à la documentation pandas pour DataFrame.query , en particulier la mention sur le
@
préfixe udsing référencé variabile local . Dans ce cas, nous référonspd.Timestamp
à l'utilisation de l'alias localts
pour pouvoir fournir une chaîne d'horodatagela source
Ainsi, lors du chargement du fichier de données csv, nous devrons définir la colonne de date comme index maintenant comme ci-dessous, afin de filtrer les données en fonction d'une plage de dates. Cela n'était pas nécessaire pour la méthode désormais obsolète: pd.DataFrame.from_csv ().
Si vous souhaitez simplement afficher les données pour deux mois de janvier à février, par exemple du 01/01/2020 au 29/02/2020, vous pouvez le faire:
Cela a été testé pour Python 3.7. J'espère que vous trouverez cela utile.
la source
index_col
ne doit pas êtrestring
une liste.mydata = pd.read_csv('mydata.csv',index_col='date')
Que diriez-vous d'utiliser
pyjanitor
Il a des fonctionnalités intéressantes.
Après
pip install pyjanitor
la source
Le moyen le plus court de filtrer votre dataframe par date: Supposons que votre colonne de date soit de type datetime64 [ns]
la source
Je ne suis pas encore autorisé à écrire de commentaires, alors j'écrirai une réponse, si quelqu'un veut les lire tous et atteindre celui-ci.
Si l'index de l'ensemble de données est une date / heure et que vous souhaitez le filtrer uniquement par mois (par exemple), vous pouvez procéder comme suit:
Cela filtrera l'ensemble de données pour vous d'ici mars.
la source
Si vous avez déjà converti la chaîne en un format de date en utilisant pd.to_datetime, vous pouvez simplement utiliser:
df = df[(df['Date']> "2018-01-01") & (df['Date']< "2019-07-01")]
la source
Vous pouvez simplement sélectionner la plage horaire en faisant: df.loc ['start_date': 'end_date']
la source