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.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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
dadosQue 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 14Agora, 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!