Tenho uma base de dados, a qual descreve o momento de início de vários eventos. Preciso saber como faço para fazer uma query pelo horário desses eventos para determinar se foram diurnos ou noturnos. o formato da data está assim: dd/mm/aaaa hh:mm.
Tenho uma base de dados, a qual descreve o momento de início de vários eventos. Preciso saber como faço para fazer uma query pelo horário desses eventos para determinar se foram diurnos ou noturnos. o formato da data está assim: dd/mm/aaaa hh:mm.
Boas Edgard! Tudo Bem? Espero que sim!
Para ajudar a resolver o seu problema, fiz alguns testes com a seguinte base de dados que eu criei:
dados = pd.DataFrame()
data_hora = '01/02/2000 14:30', '05/04/2000 21:30', '07/12/2000 10:30', '30/10/2000 20:24'
evento = 'saque', 'transferencia', 'PIX', 'saque'
dados['data_hora'] = data_hora
dados['evento'] = evento
dados
Que resulta em:
data_hora | evento | |
---|---|---|
0 | 01/02/2000 14:30 | saque |
1 | 05/04/2000 21:30 | transferencia |
2 | 07/12/2000 10:30 | PIX |
3 | 30/10/2000 20:24 | saque |
Agora, para trabalhar tranquilamente com as datas e horas, vou transformar a coluna data_hora de uma string, como está agora, para um formato adequado. Para isso, vamos fazer:
dados.data_hora = pd.to_datetime(dados.data_hora)
Veja como nossos dados mudaram:
data_hora | evento | |
---|---|---|
0 | 2000-01-02 14:30:00 | saque |
1 | 2000-05-04 21:30:00 | transferencia |
2 | 2000-07-12 10:30:00 | PIX |
3 | 2000-10-30 20:24:00 | saque |
Podemos acessar o objeto e extrair o horário, veja:
dados.data_hora[0].time() # --> Retorna datetime.time(14, 30)
e
dados.data_hora[0].time().hour # -- retorna 14
Agora, basta fazer uma função que acesse o horário e o classifique como diurno ou noturno, eu fiz isso de forma arbitrária, definindo que qualquer hora a partir das 18, ou seja, >=18 é noturno.
def define_diurno_noturno(data_hora):
if data_hora.time().hour >= 18:
return 'noturno'
else:
return 'diurno'
Vamos fazer um teste com a função:
define_diurno_noturno(dados.data_hora[0]) # --> retorna 'diurno'
Vamos criar uma nova coluna `período` usando o `map()` com a função que acabamos de criar:
dados['periodo'] = dados.data_hora.map(define_diurno_noturno)
Que retorna:
data_hora | evento | periodo | |
---|---|---|---|
0 | 01/02/2000 14:30 | saque | diurno |
1 | 05/04/2000 21:30 | transferencia | noturno |
2 | 07/12/2000 10:30 | PIX | diurno |
3 | 30/10/2000 20:24 | saque | noturno |
Espero ter ajudado! Bons Estudos!