Tenho um arquivo csv que leio com pandas para um dataframe. A coluna de tempo é formatada em dias desde 01-01-1900. O objetivo é obter uma coluna isoformatada com o "T" entre data e hora.
O arquivo csv se parece com:
DateTime,column1,column2,column3,column4,column5
43621.6210327662,1.234,2.665,0.888,3.891,3.762
43621.6210445023,2.232,1.233,0.888,3.789,3.524
Meu código para leitura é:
import pandas as pd
df = pd.read_csv(myfile.csv)
df
e o dataframe contém dias desde 01-01-1900:
DateTime column1 column2 column3 column4 column5
0 43621.621033 1.234 2.665 0.888 3.891 3.762
1 43621.621045 2.232 1.233 0.888 3.789 3.524
Agora eu converto a data formatada em dias para uma aparência mais comum:
from datetime import datetime, timedelta
df['DateTime'] = pd.to_datetime('1900-01-01') + pd.to_timedelta(df['DateTime'],'D')
df
DateTime column1 column2 column3 column4 column5
0 2019-06-07 14:54:17.230999464 1.234 2.665 0.888 3.891 3.762
1 2019-06-07 14:54:18.244998936 2.232 1.233 0.888 3.789 3.524
Meu objetivo é ter uma coluna DateTime isoformatada que tenha o "T" entre data e hora como:
DateTime column1 column2 column3 column4 column5
0 2019-06-07T14:54:17.230999464 1.234 2.665 0.888 3.891 3.762
1 2019-06-07T14:54:18.244998936 2.232 1.233 0.888 3.789 3.524
Mas a coluna DateTime parece ser uma série em vez de uma data? Não consigo aplicar algo como:
df['DateTime'].isoformat()
Como devo proceder?
Isso está correto, a coluna DateTime é uma Series, não uma data. Você está tentando aplicar
isoformat()
à coluna inteiradf['DateTime']
, e ela não tem esse método.Cada coluna de um DataFrame é uma Series. Series têm métodos para lidar diretamente com datas que você pode acessar com
.dt
. Alternativamente, você pode aplicar uma função a cada elemento da série comapply
oumap
.Não está claro se você deseja manter os valores DateTime como strings, cada uma com a data em isoformato, ou se deseja apenas imprimir o dataframe com esse formato.
Se você quiser manter uma coluna com as datas convertidas em strings, você pode fazer um destes dois:
Se você quiser apenas imprimi-los, você também pode fazer isso: