Como Converter a Coluna DataFrame para DataTempo em Pandas

Jinku Hu 30 janeiro 2023
  1. Função Pandas to_datetime para converter a coluna DataFrame para datatime
  2. DataFrame apply Método para converter a coluna DataFrame para DataTime
  3. Métodos para Converter a Coluna DataFrame para Comparação de Desempenho DataFrame
Como Converter a Coluna DataFrame para DataTempo em Pandas

Vamos introduzir métodos para converter a coluna DataFrame de Pandas para Python datetime.

  • Pandas to_datetime() função
  • DataFrame método apply para operar em elementos na coluna

Usaremos o mesmo DataFrame abaixo neste artigo.

>>> from datetime import datetime, timedelta
>>> from pandas import DataFrame
>>> df = DataFrame.from_items(
    [('Alfa', [1, 2, 3]), 
     ('Bravo', [4, 5, 6]), 
     ('Datetime', [datetime.strftime(datetime.now()-timedelta(days=_), "%m/%d/%Y, %H:%M:%S") for _ in range(3)])], 
    orient='index', 
    columns=['A', 'B', 'C']).T
>>> df
  Alfa Bravo              Datetime
A    1     4  12/07/2019, 14:08:55
B    2     5  12/06/2019, 14:08:55
C    3     6  12/05/2019, 14:08:55

Função Pandas to_datetime para converter a coluna DataFrame para datatime

Pandas to_datetime função converte o argumento dado para datetime.

pandas.to_datetime(param, format="")

O formato especifica o padrão da string de data/hora. É o mesmo com o formato em stftime ou strptime no módulo Python datetime.

>>> df
  Alfa Bravo              Datetime
A    1     4  12/07/2019, 14:08:55
B    2     5  12/06/2019, 14:08:55
C    3     6  12/05/2019, 14:08:55
>>> df['Datetime'] = pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
>>> df
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:08:55
B    2     5 2019-12-06 14:08:55
C    3     6 2019-12-05 14:08:55

A função to_datetime() não modifica os dados DataFrame no local, portanto precisamos atribuir o retorno de Pandas Series para a coluna específica DataFrame.

to_datetime() Função é inteligente para converter para Datetime

A função to_datetime() poderia fazer a conversão para datetime de uma forma inteligente sem dar a string de formato datetime. Ele irá encontrar o padrão de string automaticamente e de forma inteligente.

>>> df['Datetime'] = pd.to_datetime(df['Datetime'])
>>> df
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:08:55
B    2     5 2019-12-06 14:08:55
C    3     6 2019-12-05 14:08:55
Atenção

Embora o to_datetime pudesse fazer seu trabalho sem dar o format de forma inteligente, a velocidade de conversão é muito menor do que aquela quando o format é dado.

Nós poderíamos definir a opção infer_datetime_format de to_datetime para ser True para mudar a conversão para um modo mais rápido se o formato da string datetime pudesse ser inferido sem dar a string format.

Isto poderia aumentar a velocidade de análise em 5~6 vezes.

DataFrame apply Método para converter a coluna DataFrame para DataTime

apply(func, *args, **kwds)

O método apply de DataFrame aplica a função func a cada coluna ou linha.

Poderíamos utilizar a função lambda no lugar de func pela simplicidade.

>>> df['Datetime'] = df['Datetime'].apply(lambda _: datetime.strptime(_,"%m/%d/%Y, %H:%M:%S"))
		   
>>> df
		   
  Alfa Bravo            Datetime
A    1     4 2019-12-07 14:44:35
B    2     5 2019-12-06 14:44:35
C    3     6 2019-12-05 14:44:35

Métodos para Converter a Coluna DataFrame para Comparação de Desempenho DataFrame

Vamos utilizar o timeit para comparar o desempenho temporal de ambos os métodos introduzidos neste artigo.

In [1]: %timeit pd.to_datetime(df['Datetime'], format="%m/%d/%Y, %H:%M:%S")
452 µs ± 85.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [2]: %timeit df['Datetime'].apply(lambda _: datetime.strptime(_,"%m/%d/%Y, %H:%M:%S"))
377 µs ± 58.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

O método apply é ainda ligeiramente melhor que o método nativo de Pandas to_datetime, com cerca de 80% do tempo de execução da função to_datetime.

Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - Pandas DataFrame

Artigo relacionado - Pandas DataFrame Column

Artigo relacionado - Python DateTime