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.