1
votes

Fractionner en pandas une date d'horodatage

J'ai une question sur un problème de pandas:

J'ai donc un dataframe qui ressemble à ce qui suit:

    timestamp     user     exercises
    2018-01-01    John         7
    2018-01-01    Mary         9
    2018-02-01    John         3
    2018-02-01    Mary         2
    2018-03-01    John         1
    2018-03-01    Mary         5

Et j'ai besoin d'obtenir un dataframe de sortie qui est un sous-ensemble de celui donné, mais il ne doit conserver que les données de l'année 2018, comme ceci:

timestamp     user     exercises
2018-01-01    John         7
2018-01-01    Mary         9
2018-02-01    John         3
2018-02-01    Mary         2
2018-03-01    John         1
2018-03-01    Mary         5
2019-01-01    John         3
2019-01-01    Mary         4
2019-02-01    John         2
2019-02-01    Mary         5
2020-01-01    John         6
2020-01-01    Mary         2
2020-02-01    John         1
2020-02-01    Mary         2

Toute idée sur la façon d'obtenir cette image de sortie à partir du donné dataframe?

Merci beaucoup d'avance.

Toute aide sera appréciée.


1 commentaires

L'horodatage est-il une chaîne ou un type de date?


5 Réponses :


0
votes
 import pandas as pd

 /* Convert the date column to Datetime format */

 data['DATE'] = pd.to_datetime(data['DATE'])

 /* Create mask for the required condition */

 mask = data['DATE'] <= '31-12-2018'

 /* apply mask to the data */

 data = data.loc[mask]
Try something like this and let me know if this helps.

0 commentaires

0
votes

Utilisez la série .dt.year pour sélectionner uniquement l'année 2018:

print(df_new)
   timestamp  user  exercises
0 2018-01-01  John          7
1 2018-01-01  Mary          9
2 2018-02-01  John          3
3 2018-02-01  Mary          2
4 2018-03-01  John          1
5 2018-03-01  Mary          5

# df['timestamp'] = pd.to_datetime(df['timestamp'])

df_new = df[df['timestamp'].dt.year == 2018]


0 commentaires

1
votes

Essayez :

timestamp   user    exercises
0   2018-01-01  john    7
1   2018-01-01  mary    9

    timestamp   user    exercises
0   2018-01-01  john    7
1   2018-01-01  mary    9
2   2019-01-01  john    3
3   2020-01-01  mary    2

sortie p >

import pandas as pd
import datetime as dt

df = pd.DataFrame({"timestamp": ['2018-01-01',
                                 '2018-01-01',
                                 '2019-01-01',
                                 '2020-01-01'],
                   "user": ['john', 'mary', 'john', 'mary'],
                   'exercises': [7,9,3,2]},)


df['timestamp'] = pd.to_datetime(df['timestamp'])

df[df['timestamp'].dt.year == 2018]


0 commentaires

0
votes

Si vous aimez les lambdas, vous pouvez utiliser ci-dessous:

si l'horodatage est une chaîne:

df.loc[lambda df: (pd.to_datetime(df.timestamp)).dt.year == 2018]

si l'horodatage est la date:

df.loc[lambda df: df.timestamp.str[:4] == '2018']


0 commentaires

0
votes

Votre index est-il un DatetimeIndex ? Si tel est le cas, vous pouvez appeler data.loc ["2018"] . En interne, pandas traitera «2018» comme l'année 2018 et, comme le découpage .loc est inclusif sur les deux bords, sélectionnera toutes les données de cette année.


0 commentaires