Ho un enorme frame di dati con molte colonne, molte delle quali sono di tipo datetime.datetime. Il problema è che molti hanno anche tipi misti, inclusi ad esempio datetime.datetimevalori e Nonevalori (e potenzialmente altri valori non validi):
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
Quindi risulta una objectcolonna di tipo. Questo può essere risolto con df.colx.fillna(pd.NaT). Il problema è che il frame di dati è troppo grande per cercare singole colonne.
Un altro approccio è quello di utilizzare pd.to_datetime(col, errors='coerce'), tuttavia questo eseguirà il cast su datetimemolte colonne che contengono valori numerici.
Potrei anche fare df.fillna(float('nan'), inplace=True), anche se le colonne contenenti le date sono ancora di objecttipo e avrebbero ancora lo stesso problema.
Quale approccio potrei seguire per trasmettere a datetime quelle colonne i cui valori in realtà contengono datetimevalori, ma potrebbero anche contenere Nonee potenzialmente alcuni valori non validi (menzionando poiché altrimenti farebbe pd.to_datetimeuna clausola in a try/ except)? Qualcosa come una versione flessibile dipd.to_datetime(col)
Nonetue colonne sono presenti Noneo effettivi rappresentanti di stringhe?
None, non stringhe. Potenzialmente ci possono essere anche valori errati ... @erfan
datetimee valuesin essa?
datetime.datetimeopandas._libs.tslibs.timestamps.Timestamp? Se il primo la mia raccomandazione sarebbe quella di cambiare qualunque cosa abbia creato il datetime nel tipo chepandasgestisce un po 'meglio.