Tengo un marco de datos de pandas con las siguientes columnas;
Date Time
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00
¿Cómo combino datos ['Fecha'] y datos ['Hora'] para obtener lo siguiente? ¿Hay alguna forma de hacerlo usando pd.to_datetime
?
Date
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00
Respuestas:
Vale la pena mencionar que es posible que haya podido leer esto directamente, por ejemplo, si estaba usando
read_csv
usingparse_dates=[['Date', 'Time']]
.Suponiendo que estas son solo cadenas, simplemente puede agregarlas (con un espacio), lo que le permite aplicar
to_datetime
:Nota: sorprendentemente (para mí), esto funciona bien con los NaN convertidos a NaT, pero vale la pena preocuparse de que la conversión (quizás usando el
raise
argumento).fuente
parse_dates=[['Start date', 'Start time'], ['End date', 'End time']])
. Pandas <3La respuesta aceptada funciona para columnas que son de tipo de datos
string
. Para completar: me encuentro con esta pregunta al buscar cómo hacer esto cuando las columnas son de tipos de datos: fecha y hora.fuente
time
d, en pandas. Tengo más bien unatimedelta
(y unadatetime
), en cuyo caso solo necesita agregarlas, vea mi respuestapd.datetime
se ha desaprobado y se sugiere simplemente importar explícitamente eldatetime
módulo.Puede usar esto para combinar fecha y hora en la misma columna de marco de datos.
Leyendo el archivo .csv con columnas fusionadas Date_Time:
Puede usar esta línea para mantener las otras dos columnas también.
fuente
date_parser
, por ejemploparser = lambda date: pd.datetime.strptime(date, '%d-%b-%y %H:%M:%S')
Puede convertir las columnas si los tipos son diferentes (fecha y hora y marca de tiempo o str) y usar to_datetime:
Resultado:
Mejor,
fuente
No tengo suficiente reputación para comentar sobre jka.ne, así que:
Tuve que modificar la línea de jka.ne para que funcionara:
Esto podría ayudar a otros.
Además, he probado un enfoque diferente, usando en
replace
lugar decombine
:que en el caso del OP sería:
He cronometrado ambos enfoques para un conjunto de datos relativamente grande (> 500.000 filas), y ambos tienen tiempos de ejecución similares, pero el uso
combine
es más rápido (59 segundosreplace
frente a 50 segundoscombine
).fuente
La respuesta realmente depende de cuáles sean sus tipos de columna . En mi caso, tuve
datetime
ytimedelta
.Si este es tu caso, solo necesitas agregar las columnas:
fuente
datetime
ytimedelta
. La respuesta principal de alguna manera descubrió que las columnas eran cadenas, o tal vez fue solo la respuesta que funcionó para el que publicó la pregunta.También puede convertir a
datetime
sin concatenación de cadenas, combinando objetosdatetime
ytimedelta
. Combinado conpd.DataFrame.pop
, puede eliminar la serie fuente simultáneamente:fuente
Primero asegúrese de tener los tipos de datos correctos:
Entonces puedes combinarlos fácilmente:
fuente
Usa la
combine
función:fuente
Mi conjunto de datos tuvo datos de resolución de 1 segundo durante unos días y el análisis con los métodos sugeridos aquí fue muy lento. En su lugar usé:
Tenga en cuenta que el uso de
cache=True
hace que analizar las fechas sea muy eficiente, ya que solo hay un par de fechas únicas en mis archivos, lo que no es cierto para una columna de fecha y hora combinadas.fuente
DATOS:
<TICKER>, <PER>, <DATE>, <TIME> , <OPEN>, <HIGH>, <LOW>, <CERRAR>, <VOL> SPFB.RTS, 1, 20190103,100100 , 106580.0000000,107260.0000000,106570.0000000 , 107230.0000000,3726
CÓDIGO:
fuente