Como Converter a Coluna DataFrame para DataTempo em Pandas
-
Função Pandas
to_datetime
para converter a coluna DataFrame para datatime -
DataFrame
apply
Método para converter a coluna DataFrame para DataTime - Métodos para Converter a Coluna DataFrame para Comparação de Desempenho DataFrame
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
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
.