Mi marco de datos tiene un DOB
columna (formato de ejemplo 1/1/2016
) que de forma predeterminada se convierte en pandas dtype 'object':DOB object
Al convertir esto a formato de fecha con df['DOB'] = pd.to_datetime(df['DOB'])
, la fecha se convierte a: 2016-01-26
y sudtype
es: DOB datetime64[ns]
.
Ahora quiero convertir este formato de fecha a 01/26/2016
en cualquier otro formato de fecha general. ¿Cómo lo hago?
Cualquiera que sea el método que intento, siempre muestra la fecha en 2016-01-26
formato.
Respuestas:
Puede usar
dt.strftime
si necesita convertirdatetime
a otros formatos (pero tenga en cuenta que ladtype
columna seráobject
(string
)):fuente
.merge
columna de fecha y hora de otro marco de datos? ¿Tiene algún sentido convertir la otra columna de fecha y hora en una columna de objeto para hacer el.merge
?.merge
aún se puede hacer correctamente si ambas columnas son columnas de fecha y hora, incluso si no tienen exactamente el mismo formato. ¿Es esto correcto?Cambiar el formato pero no cambiar el tipo:
fuente
date
columna es " 26 de noviembre de 2019".strftime()
significa "cadena de tiempo" , pordf["date"].dt.strftime('%Y-%m')
lo que será una cadena"2019-11"
para ese elemento. Luego,pd.to_datetime()
convertirá esta cadena de nuevo aldatetime64
formato, ¡pero ahora como " 1 de noviembre de 2019"! Entonces, el resultado será: ¡ Sin cambio de formato, pero sí el cambio del valor de la fecha!El siguiente código funcionó para mí en lugar del anterior, ¡pruébalo!
fuente
format='%m/%d/%Y'
parámetro es para analizar una cadena, es decir, se supone que debe proporcionar la cadena en tal formato (por ejemplo"5/13/2019"
). Nada más, ningún cambio de formato. Seguirá mostrándose como2019-05-13
- o generará una excepción, sidf['DOB'].astype(str)
contiene elementos que no están en ese formato, por ejemplo, en un formato"2019-05-13"
.En comparación con la primera respuesta, recomendaré usar primero dt.strftime (), luego pd.to_datetime (). De esta manera, seguirá dando como resultado el tipo de datos de fecha y hora.
Por ejemplo,
fuente
Hay una diferencia entre
Entonces, la pregunta es: ¿Cómo lograr la presentación adecuada de mis datos sin cambiar los datos / tipos de datos en sí mismos?
Esta es la respuesta:
id
yclass
atributos para más estilo CSS - que puede o no puede usarlos),usar estilo . El estilo no cambia los datos / tipos de datos de las columnas de su marco de datos.
Ahora le muestro cómo llegar a él en el cuaderno de Jupyter; para una presentación en forma de archivo HTML, vea la nota cerca del final de la pregunta.
Supongo que tu columna
DOB
ya tiene el tipodatetime64
(has demostrado que sabes cómo llegar). Preparé un marco de datos simple (con solo una columna) para mostrarte algunos estilos básicos:Sin estilo:
Diseñándolo como
mm/dd/yyyy
:Diseñándolo como
dd-mm-yyyy
:¡Ten cuidado!
El objeto que regresa NO es un marco de datos, es un objeto de la clase
Styler
, así que no lo asigne de nuevo adf
:No hagas esto:
(Cada marco de datos tiene su objeto Styler accesible por su
.style
propiedad, y cambiamos estedf.style
objeto, no el marco de datos en sí).Preguntas y respuestas:
P: ¿Por qué su objeto Styler (o una expresión que lo devuelve) utilizado como último comando en una celda de cuaderno de Jupyter muestra su tabla (con estilo) y no el objeto Styler en sí?
R: Porque cada objeto Styler tiene un método de devolución de llamada
._repr_html_()
que devuelve un código HTML para representar su marco de datos (como una bonita tabla HTML).Jupyter Notebook IDE llama a este método automáticamente para representar los objetos que lo tienen.
Nota:
No necesita el cuaderno Jupyter para diseñar (es decir, para generar una buena salida de un marco de datos sin cambiar sus datos / tipos de datos ).
Un objeto Styler también tiene un método
render()
, si desea obtener una cadena con el código HTML (por ejemplo, para publicar su marco de datos formateado en la Web, o simplemente presentar su tabla en formato HTML):fuente
if
, declaración tan conocida para todos los programadores? - A pesar de ello gracias por tu comentario, puede ser de ayuda para algunas personas.pd.to_datetime()
tiene los argumentoserrors='raise'/'coerce'/'ignore', dayfirst, yearfirst, utc, exact
para controlar qué tan preciso y feliz es con las excepciones, y si las salidas no válidas se obligan a hacerloNaT
o qué. Lo que lo hace más complicado en los conjuntos de datos del "mundo real" son los formatos, horas, zonas horarias, etc. mezclados / faltantes / incompletos; las excepciones no son necesariamente cosas malas.El siguiente código cambia al tipo 'datetime' y también a los formatos en la cadena de formato dada. ¡Funciona bien!
fuente
df['DOB']=pd.to_datetime(df['DOB']).dt.strftime('%m/%d/%Y')
Puede probar esto, convertirá el formato de fecha a DD-MM-YYYY:
fuente
dayfirst=True
es solo la especificación de un orden de análisis de fecha, por ejemplo, esa cadena de fecha ambivalente como "2-1-2019" se analizará como 2 de enero de 2019, y no como 1 de febrero de 2019. Nada más, no hay cambios para el formato de salida .