Existe uma diferença entre
- o conteúdo de uma célula de dataframe (um valor binário) e
- sua apresentação (exibindo-o) para nós, humanos.
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:
- Se você usar o notebook Jupyter para exibir seu dataframe, ou
- se você deseja obter uma apresentação na forma de um arquivo HTML (mesmo com muitos supérfluos
id
e class
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:
DOB
0 2019-07-03
1 2019-08-03
2 2019-09-03
3 2019-10-03
DOB
0 07/03/2019
1 08/03/2019
2 09/03/2019
3 10/03/2019
DOB
0 03-07-2019
1 03-08-2019
2 03-09-2019
3 03-10-2019
Seja cuidadoso!
O objeto de retorno NÃO é um dataframe - é um objeto da classe Styler
, portanto , não o atribua de volta a df
:
Não faça isso:
df = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")}) # Don´t do this!
(Cada dataframe tem seu objeto Styler acessível por sua .style
propriedade, e mudamos esse df.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):
df_styler = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})
HTML_string = df_styler.render()