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.datetime
valeurs et des None
valeurs (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 object
colonne 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 datetime
nombreuses 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 object
type 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 datetime
valeurs, mais pourraient également contenir None
, et potentiellement des valeurs invalides (en mentionnant qu'autrement une clause pd.to_datetime
dans une try
/ except
ferait)? Quelque chose comme une version flexible depd.to_datetime(col)
None
dans vos colonnes, des None
représentants réels ou des chaînes de caractères?
None
pas des ficelles. Potentiellement , il peut y avoir de mauvaises valeurs aussi ... @erfan
datetime
et values
en elle?
datetime.datetime
oupandas._libs.tslibs.timestamps.Timestamp
? Si l'ancien ma recommandation serait de changer tout ce qui a créé le datetime au type quipandas
gère un peu mieux.