Estoy tratando de convertir fecha diferente en formato de cadena de fecha y hora a formato. Tengo alrededor de ~ 1.000.000 filas de fechas en la columna 'status_change_date'. El problema es que hay muchos formatos diferentes y que no saben en qué formato están todos.
Por lo tanto, estoy tratando de esta función en mi nota jupyter:
def parsing_date(date_string):
for date_format in ("%d/%m/%Y %H:%M:%S", "%m/%d/%Y %H:%M:%S", "%m/%d/%Y %H:%M:%S%p", "%d/%m/%Y %H:%M:%S%p", "%-m/%-d/%Y %H:%M:%S", "%-d/%-m/%Y %H:%M:%S", "%-m/%-d/%Y %H:%M:%S%p", "%-d/%-m/%Y %H:%M:%S%p"):
try:
return datetime.strptime(date_string, date_format)
except ValueError:
raise
print(date_string)
raise ValueError('Something is wrong')
luego,
data['status_chage_date'].apply(parsing_date)
Estoy imprimiendo el error para que pueda tener en cuenta uno por uno en mi función hasta que no hay error más. Sin embargo, me encuentro con este mensaje de error:
ValueError: time data '17/10/2019 05:49:51' does not match format '%m/%d/%Y %H:%M:%S'
o
strptime() argument 1 must be str, not None
Pensé que cubría el formato en mi función y el segundo error es extraño que Excluí filas que tiene valor ninguno.
¿Qué estoy haciendo mal y hay una mejor manera de hacer esto?
tenga en cuenta que se eleva cuando se produce un error! Es necesario poner a prueba todas sus posibilidades antes:
import pandas as pd
def parsing_date(date_string):
d = None
for date_format in ("%d/%m/%Y %H:%M:%S", "%m/%d/%Y %H:%M:%S", "%m/%d/%Y %H:%M:%S%p", "%d/%m/%Y %H:%M:%S%p", "%-m/%-d/%Y %H:%M:%S", "%-d/%-m/%Y %H:%M:%S", "%-m/%-d/%Y %H:%M:%S%p", "%-d/%-m/%Y %H:%M:%S%p"):
try:
d = datetime.strptime(date_string, date_format)
break
except:
pass
if d is not None:
return d
else:
return pd.NaT
Observe también que si su día y mes son a la vez entre los números 1 a 12, no estará seguro de que su análisis a la fecha y hora correcta. Si es posible, se debe buscar lo que hace que los diferentes formatos y analizar de forma individual.