Convertir la colonne Pandas en DateTime


242

J'ai un champ dans un pandas DataFrame qui a été importé au format chaîne. Il doit s'agir d'une variable datetime. Comment puis-je le convertir en une colonne datetime, puis filtrer en fonction de la date.

Exemple:

  • Nom du DataFrame : raw_data
  • Nom de la colonne: Mycol
  • Format de valeur dans la colonne: '05SEP2014: 00: 00: 00.000'

Réponses:


431

Utilisez la to_datetimefonction en spécifiant un format pour correspondre à vos données.

raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')

71
Remarque: l' formatargument n'est pas requis. to_datetimeest intelligent. Allez-y et essayez-le sans essayer de faire correspondre vos données.
— samthebrand

6
Afin d'éviter l' SettingWithCopyWarningutilisation du @ darth-behfans stackoverflow.com/a/42773096/4487805
— Álvaro Loza

3
Et si vous voulez juste du temps et non du rendez-vous?
— FaCoffee

5
Pas terriblement intelligent. Même si une partie de la colonne est sans ambiguïté au format dayfirst = True, elle sera toujours par défaut à dayfirst = False pour les autres de la même colonne. Il est donc plus sûr d'utiliser une spécification de format explicite ou au moins le paramètre dayfirst.
— CPBL

10
L'omission de la chaîne de formatage peut ralentir cette opération avec de nombreux enregistrements. Cette réponse explique pourquoi. On dirait que cela infer_datetime_format=Truepourrait également augmenter la vitesse d'analyse jusqu'à ~ 5-10x (selon les documents de pandas) si vous n'incluez pas de chaîne de format.
— atwalsh

52

Vous pouvez utiliser la méthode DataFrame .apply()pour opérer sur les valeurs dans Mycol:

>>> df = pd.DataFrame(['05SEP2014:00:00:00.000'],columns=['Mycol'])
>>> df
                    Mycol
0  05SEP2014:00:00:00.000
>>> import datetime as dt
>>> df['Mycol'] = df['Mycol'].apply(lambda x: 
                                    dt.datetime.strptime(x,'%d%b%Y:%H:%M:%S.%f'))
>>> df
       Mycol
0 2014-09-05

1
Merci! C'est bien car c'est plus largement applicable mais l'autre réponse était plus directe. J'ai eu du mal à décider ce que j'aimais mieux :)
— Chris

2
J'aime mieux cette réponse, car elle produit un objet datetime par opposition à un objet
— pandas.tslib.Timestamp

25

Si vous avez plusieurs colonnes à convertir, vous pouvez procéder comme suit:

df[["col1", "col2", "col3"]] = df[["col1", "col2", "col3"]].apply(pd.to_datetime)

15
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')

fonctionne, mais il en résulte un avertissement Python d'une valeur tente d'être définie sur une copie d'une tranche à partir d'un DataFrame. Essayez d'utiliser à la .loc[row_indexer,col_indexer] = valueplace

Je suppose que cela est dû à une indexation en chaîne.


3
Cela m'a pris quelques essais, mais cela fonctionne: raw_data.loc [:, 'Mycol'] = pd.to_datetime (raw_data ['Mycol'], format = '% d% b% Y:% H:% M:% S .% f ')
— pinegulf

9

Utilisez la to_datetimefonction pandas pour analyser la colonne comme DateTime. De plus, en utilisant infer_datetime_format=True, il détectera automatiquement le format et convertira la colonne mentionnée en DateTime.

import pandas as pd
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], infer_datetime_format=True)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.