Comment convertir une chaîne de caractères de type datetime avec des valeurs null - python, les pandas?
J'ai une série avec quelques datetimes (chaînes) et certaines valeurs null 'nan':
import pandas as pd, numpy as np, datetime as dt
df = pd.DataFrame({'Date':['2014-10-20 10:44:31', '2014-10-23 09:33:46', 'nan', '2014-10-01 09:38:45']})
Je suis en train de convertir ces datetime:
df['Date'] = df['Date'].apply(lambda x: dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S'))
mais j'obtiens l'erreur:
time data 'nan' does not match format '%Y-%m-%d %H:%M:%S'
J'ai donc essayer de les transformer en réel les valeurs null:
df.ix[df['Date'] == 'nan', 'Date'] = np.NaN
et le répète:
df['Date'] = df['Date'].apply(lambda x: dt.datetime.strptime(x, '%Y-%m-%d %H:%M:%S'))
mais ensuite, j'obtiens l'erreur:
doit être de chaîne, pas de float
Quel est le moyen le plus rapide pour résoudre ce problème?
OriginalL'auteur Colin O'Brien | 2015-03-27
Vous devez vous connecter pour publier un commentaire.
Suffit d'utiliser
to_datetime
et définirerrors='coerce'
pour gérer duff données:le problème avec l'appel de
strptime
c'est qu'il va déclencher une erreur si la chaîne, ou dtype est incorrect.Si vous avez fait cela, alors il devrait fonctionner:
mais il sera plus rapide d'utiliser la fonction intégrée de
to_datetime
plutôt que d'appelerapply
qui, essentiellement, boucles tout sur votre série.timings
Nous voyons ici que l'utilisation de
to_datetime
est 3X plus rapide.errors='coerce'
au lieu decoerce=True
.OriginalL'auteur EdChum
Je trouve laissant les pandas de faire le travail pour être trop lent sur de grandes dataframes. Dans un autre post, j'ai appris une technique qui permet ce de façon spectaculaire lorsque le nombre de valeurs uniques est beaucoup plus petit que le nombre de lignes. (Mes données est généralement cours de bourse de commerce ou de buvard de données). Il commence par créer un dict que les cartes de la texte de dates à leur datetime objets, puis applique le dict pour convertir la colonne de texte dates.
OriginalL'auteur jdmarino