J'ai un DataFrame lu à partir d'une base de données. Il contient des dates qui m'indiquent la validité d'une ligne, malheureusement dans un format décimal (14 chiffres) comme ceci 20190130110429
) ; de même, si l'entrée est encore valide (c'est-à-dire que la date est dans le futur), la colonne tient 999999999999999
(15 neuf).
Lorsque j'essaye de le convertir en datetime avec
pd.to_datetime(df['date'],format='%Y%m%d%H%M%S')
il échoue pour les 999... entrées. J'ai essayé de considérer les deux cas séparément
df['date'] = df['date'].astype(str)
mask = df['date']=='999999999999999'
df.loc[~mask,'date'] = pd.to_datetime(df.loc[~mask,'date'],format='%Y%m%d%H%M%S')
df.loc[mask,'date'] = pd.datetime.max # also tried np.datetime64(pd.datetime.max,unit='s')
Mais cela mélange les types :
[(x,type(x)) for x in df['date']
[(datetime.datetime(9999, 12, 31, 23, 59, 59, 999999), datetime.datetime),
(1548846269000000000, int),
...
]
Avez-vous une idée de la manière de gérer cette situation ?
PS : Juste avant d'envoyer la question, je viens de la résoudre en
df['date'] = df['date'].astype(str)
df['date'] = df['date'].str.replace('999999999999999',pd.Timestamp.max.strftime('%Y%m%d%H%M%S'))
df['date'] = pd.to_datetime(df['date'],format='%Y%m%d%H%M%S')
Cela me donne '2262-04-11 23:47:16.854775807' comme date maximale. (Comment) Est-il possible de stocker la datetime64[s] ou [us] maximum au lieu de la datetime64[ns] ?