Meu dataframe tem uma DOB
coluna (formato de exemplo 1/1/2016
) que, por padrão, é convertida para 'objeto' do tipo pandas dtype:DOB object
Convertendo isso para formato de data com df['DOB'] = pd.to_datetime(df['DOB'])
, a data é convertido em: 2016-01-26
e sua dtype
é: DOB datetime64[ns]
.
Agora, quero converter esse formato de data para 01/26/2016
ou em qualquer outro formato de data geral. Como eu faço isso?
Qualquer que seja o método que tente, sempre mostra a data no 2016-01-26
formato.
Respostas:
Você pode usar
dt.strftime
se precisar converterdatetime
para outros formatos (mas observe que entãodtype
da coluna seráobject
(string
)):fonte
.merge
coluna datetime de outro dataframe? Faz algum sentido converter a outra coluna datetime em uma coluna de objeto para fazer o.merge
?.merge
isso ainda pode ser feito corretamente se ambas as colunas forem colunas de data e hora, mesmo que não tenham exatamente o mesmo formato. Isto está certo?Mudar o formato, mas não mudar o tipo:
fonte
date
coluna seja “ 26 de novembro de 2019”.strftime()
significa "string do tempo" , entãodf["date"].dt.strftime('%Y-%m')
será uma string"2019-11"
para esse item. Então,pd.to_datetime()
irá converter esta string de volta para odatetime64
formato, mas agora como “ 1 de novembro de 2019”! Portanto, o resultado será: Nenhuma mudança de formato, mas a mudança do próprio valor de data!O código abaixo funcionou para mim em vez do anterior - experimente!
fonte
format='%m/%d/%Y'
parâmetro é para analisar uma string, ou seja, você deve fornecer a string nesse formato (por exemplo"5/13/2019"
). Nada mais, nenhuma mudança de formato. Ele ainda será exibido como2019-05-13
- ou gerará uma exceção, sedf['DOB'].astype(str)
contiver item (ns) que não estejam em tal formato, por exemplo, em um formato"2019-05-13"
.Em comparação com a primeira resposta, recomendarei usar dt.strftime () primeiro, depois pd.to_datetime (). Dessa forma, ainda resultará no tipo de dados datetime.
Por exemplo,
fonte
Existe uma diferença entre
Portanto, a questão é: como chegar à apresentação adequada dos meus dados sem alterar os próprios dados / tipos de dados?
Aqui está a resposta:
id
eclass
atributos preparados para um estilo CSS adicional - você pode ou não usá-los),usar estilo .O estilo não altera os dados / tipos de dados das colunas do seu dataframe.
Agora vou mostrar como fazer isso no bloco de notas Jupyter - para uma apresentação na forma de arquivo HTML, veja a nota no final da pergunta.
Suponho que sua coluna
DOB
já tenha o tipodatetime64
(você mostrou que sabe como chegar). Eu preparei um dataframe simples (com apenas uma coluna) para mostrar alguns estilos básicos:Sem estilo:
Definindo como
mm/dd/yyyy
:Definindo como
dd-mm-yyyy
:Seja cuidadoso!
O objeto de retorno NÃO é um dataframe - é um objeto da classe
Styler
, portanto , não o atribua de volta adf
:Não faça isso:
(Cada dataframe tem seu objeto Styler acessível por sua
.style
propriedade, e mudamos essedf.style
objeto, não o próprio dataframe.)Perguntas e respostas:
P: Por que seu objeto Styler (ou uma expressão que o retorna) usado como o último comando em uma célula do bloco de notas Jupyter exibe sua tabela (estilizada) e não o próprio objeto Styler?
R: Porque cada objeto Styler tem um método de retorno de chamada
._repr_html_()
que retorna um código HTML para renderizar seu dataframe (como uma boa tabela HTML).O Jupyter Notebook IDE chama esse método automaticamente para renderizar objetos que o possuem.
Nota:
Você não precisa do notebook Jupyter para estilizar (ou seja, para gerar um quadro de dados sem alterar seus tipos de dados / dados ).
Um objeto Styler também tem um método
render()
, se você quiser obter uma string com o código HTML (por exemplo, para publicar seu dataframe formatado na Web ou simplesmente apresentar sua tabela no formato HTML):fonte
if
declaração condicional , tão conhecida por todos os programadores? - Apesar de tudo obrigado pelo seu comentário, pode ser útil para algumas pessoas.pd.to_datetime()
tem os argumentoserrors='raise'/'coerce'/'ignore', dayfirst, yearfirst, utc, exact
para controlar o quão preciso e tolerante a exceções ele é, e se saídas inválidas são coagidasNaT
ou não. O que o torna mais complicado em conjuntos de dados do "mundo real" são os formatos, horários, fusos horários mistos / ausentes / incompletos, etc; exceções não são necessariamente coisas ruins.O código abaixo muda para o tipo 'data e hora' e também para formatos na string de formato fornecida. Funciona bem!
fonte
df['DOB']=pd.to_datetime(df['DOB']).dt.strftime('%m/%d/%Y')
Você pode tentar isso para converter o formato de data para DD-MM-AAAA:
fonte
dayfirst=True
é apenas a especificação de uma ordem de análise de data, por exemplo, aquela string de data ambivalente como "2-1-2019" será analisada como 2 de janeiro de 2019, e não como 1 de fevereiro de 2019. Nada mais, nenhuma alteração para a formatação de saída .