HOWTO · Pandas
Comment convertir la colonne DataFrame en date-heure dans Pandas
Cet article présente comment convertir Pandas DataFrame Column en Python datetime.
Sur cette page
Nous introduirons des méthodes pour convertir la colonne Pandas DataFrame en Python datetime.
- Fonction Pandas
to_datetime(). - Méthode DataFrame
applypour opérer sur les éléments en colonne
Nous utiliserons le même DataFrame ci-dessous dans cet article.
>>> from datetime import datetime, timedelta
>>> from pandas import DataFrame
>>> df = DataFrame.from_items(
[('Alfa', [1, 2, 3]),
('Bravo', [4, 5, 6]),
('Datetime', [datetime.strftime(datetime.now()-timedelta(days=_), "%m/%d/%Y, %H:%M:%S") for _ in range(3)])],
orient='index',
columns=['A', 'B', 'C']).T
>>> df
Alfa Bravo Datetime
A 1 4 12/07/2019, 14:08:55
B 2 5 12/06/2019, 14:08:55
C 3 6 12/05/2019, 14:08:55
Fonction Pandas to_datetime pour convertir la colonne DataFrame en datetime
Fonction Pandas to_datetime convertit l’argument donné en datetime.
pandas.to_datetime(param, format="")
Le format spécifie le modèle de la chaîne datetime. C’est la même chose avec le format dans stftime ou strptime dans le module Python datetime.
>>> df
Alfa Bravo Datetime
A 1 4 12/07/2019, 14:08:55
B 2 5 12/06/2019, 14:08:55
C 3 6 12/05/2019, 14:08:55
>>> df['Datetime'] = pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
>>> df
Alfa Bravo Datetime
A 1 4 2019-12-07 14:08:55
B 2 5 2019-12-06 14:08:55
C 3 6 2019-12-05 14:08:55
La fonction to_datetime() ne modifie pas les données de la DataFrame en place, donc nous devons assigner la Series de Pandas retournée à la colonne spécifique de la DataFrame.
La fonction to_datetime() est intelligente pour convertir en Datetime
La fonction to_datetime() pourrait faire la conversion en datetime d’une manière intelligente sans donner la chaîne de format datetime. Elle trouvera le motif de la chaîne automatiquement et intelligemment.
>>> df['Datetime'] = pd.to_datetime(df['Datetime'])
>>> df
Alfa Bravo Datetime
A 1 4 2019-12-07 14:08:55
B 2 5 2019-12-06 14:08:55
C 3 6 2019-12-05 14:08:55
Bien que to_datetime puisse faire son travail sans donner le format intelligemment, la vitesse de conversion est beaucoup plus basse que celle quand le format est donné.
Nous pourrions mettre l’option infer_datetime_format de to_datetime à True pour passer la conversion à un mode plus rapide si le format de la chaîne datetime pouvait être déduit sans donner la chaîne format.
Cela pourrait augmenter la vitesse d’analyse de 5~6 fois.
DataFrame apply Méthode pour convertir une colonne de DataFrame en Datetime
apply(func, *args, **kwds)
La méthode apply de DataFrame applique la fonction func à chaque colonne ou ligne.
Nous pourrions utiliser la fonction lambda à la place de func pour la simplicité.
>>> df['Datetime'] = df['Datetime'].apply(lambda _: datetime.strptime(_,"%m/%d/%Y, %H:%M:%S"))
>>> df
Alfa Bravo Datetime
A 1 4 2019-12-07 14:44:35
B 2 5 2019-12-06 14:44:35
C 3 6 2019-12-05 14:44:35
Méthodes de conversion des colonnes de DataFrame en comparaison de performance de date et heure
Utilisons timeit pour comparer les performances de chronométrage des deux méthodes présentées dans cet article.
In [1]: %timeit pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
452 µs ± 85.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [2]: %timeit df['Datetime'].apply(lambda _: datetime.strptime(_,"%m/%d/%Y, %H:%M:%S"))
377 µs ± 58.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
La méthode apply est même légèrement meilleure que la méthode native de Pandas to_datetime, avec environ 80% du temps d’exécution de la fonction to_datetime.