J'ai une énorme trame de données avec de nombreuses colonnes, dont beaucoup sont de type datetime.datetime. Le problème est que beaucoup ont également des types mixtes, y compris par exemple des datetime.datetimevaleurs et des Nonevaleurs (et potentiellement d'autres valeurs invalides):
0 2017-07-06 00:00:00
1 2018-02-27 21:30:05
2 2017-04-12 00:00:00
3 2017-05-21 22:05:00
4 2018-01-22 00:00:00
...
352867 2019-10-04 00:00:00
352868 None
352869 some_string
Name: colx, Length: 352872, dtype: object
D'où une objectcolonne de type. Cela peut être résolu avec df.colx.fillna(pd.NaT). Le problème est que la trame de données est trop grande pour rechercher des colonnes individuelles.
Une autre approche consiste à utiliser pd.to_datetime(col, errors='coerce'), mais cela transtypera à de datetimenombreuses colonnes qui contiennent des valeurs numériques.
Je pourrais aussi le faire df.fillna(float('nan'), inplace=True), même si les colonnes contenant les dates sont toujours de objecttype et auraient toujours le même problème.
Quelle approche pourrais-je suivre pour convertir en datetime les colonnes dont les valeurs contiennent vraiment des datetimevaleurs, mais pourraient également contenir None, et potentiellement des valeurs invalides (en mentionnant qu'autrement une clause pd.to_datetimedans une try/ exceptferait)? Quelque chose comme une version flexible depd.to_datetime(col)
Nonedans vos colonnes, des Nonereprésentants réels ou des chaînes de caractères?
Nonepas des ficelles. Potentiellement , il peut y avoir de mauvaises valeurs aussi ... @erfan
datetimeet valuesen elle?
datetime.datetimeoupandas._libs.tslibs.timestamps.Timestamp? Si l'ancien ma recommandation serait de changer tout ce qui a créé le datetime au type quipandasgère un peu mieux.