Eu tenho um dataframe do pandas com as seguintes colunas;
Date Time
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00
Como faço para combinar dados ['Data'] e dados ['Hora'] para obter o seguinte? Existe uma maneira de fazer usando pd.to_datetime
?
Date
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00
Respostas:
Vale a pena mencionar que você pode ter conseguido ler isso diretamente, por exemplo, se estava
read_csv
usandoparse_dates=[['Date', 'Time']]
.Supondo que sejam apenas strings, você pode simplesmente adicioná-los (com um espaço), permitindo aplicar
to_datetime
:Nota: surpreendentemente (para mim), isso funciona bem com NaNs sendo convertidos para NaT, mas vale a pena se preocupar com a conversão (talvez usando o
raise
argumento).fonte
parse_dates=[['Start date', 'Start time'], ['End date', 'End time']])
. Pandas <3A resposta aceita funciona para colunas do tipo de dados
string
. Para completar: me deparei com esta questão ao pesquisar como fazer isso quando as colunas são de tipos de dados: data e hora.fonte
time
d, nos pandas. Eu tenho umtimedelta
(e umdatetime
) caso em que você só precisa adicioná-los, veja minha respostapd.datetime
tornou obsoleto e é sugerido apenas importar explicitamente odatetime
módulo.Você pode usar isso para mesclar data e hora na mesma coluna do dataframe.
Lendo o arquivo .csv com colunas mescladas Date_Time:
Você pode usar esta linha para manter as outras colunas também.
fonte
date_parser
, por exemploparser = lambda date: pd.datetime.strptime(date, '%d-%b-%y %H:%M:%S')
Você pode lançar as colunas se os tipos forem diferentes (datetime e timestamp ou str) e usar to_datetime:
Resultado:
melhor,
fonte
Não tenho reputação suficiente para comentar sobre jka.ne então:
Tive que alterar a linha de jka.ne para que funcionasse:
Isso pode ajudar outras pessoas.
Além disso, testei uma abordagem diferente, usando em
replace
vez decombine
:que no caso do OP seria:
Cronometrei ambas as abordagens para um conjunto de dados relativamente grande (> 500.000 linhas) e ambas têm tempos de execução semelhantes, mas o uso
combine
é mais rápido (59s parareplace
vs 50s paracombine
).fonte
A resposta realmente depende de quais são seus tipos de coluna . No meu caso, eu tinha
datetime
etimedelta
.Se este for o seu caso, você só precisa adicionar as colunas:
fonte
datetime
etimedelta
. A resposta principal de alguma forma descobriu que as colunas eram strings, ou talvez fosse apenas a resposta que funcionou para aquele que postou a pergunta.Você também pode converter para
datetime
sem concatenação de string, combinandodatetime
etimedelta
objetos. Combinado compd.DataFrame.pop
, você pode remover a série de origem simultaneamente:fonte
Primeiro, certifique-se de ter os tipos de dados corretos:
Então você os combina facilmente:
fonte
Use a
combine
função:fonte
Meu conjunto de dados tinha dados de resolução de 1 segundo por alguns dias e a análise pelos métodos sugeridos aqui era muito lenta. Em vez disso, usei:
Observe que o uso de
cache=True
torna a análise das datas muito eficiente, pois há apenas algumas datas exclusivas em meus arquivos, o que não é verdade para uma coluna combinada de data e hora.fonte
DADOS:
<TICKER>, <PER>, <DATE>, <TIME> , <OPEN>, <HIGH>, <LOW>, <CLOSE>, <VOL> SPFB.RTS, 1, 20190103,100100 , 106580.0000000,107260.0000000,106570.0000000 , 107230,0000000,3726
CÓDIGO:
fonte