Boas Vitor! Tudo bem? Espero que sim.
Nesse caso, o pd.sort_values
não funciona pois a coluna datahora é para o Pandas uma string, e não uma data. E portanto ordena essa coluna como se fosse uma string e não como um datetime.
Entretanto, existe uma maneira bastante eficiente de resolve isso, através da função pd.to_datetime
que transforma uma coluna de strings em datetimes.
Criei um DataFrame fictício para usar de exemplo:
dados = pd.DataFrame()
datas = ['28/02/2020', '04/03/2020', '07/03/2020']
vendas = [137, 238, 159]
dados['data'] = datas
dados['vendas'] = vendas
Temos um DataFrame da seguinte forma:
| data | vendas |
---|
0 | 28/02/2020 | 137 |
1 | 04/03/2020 | 238 |
2 | 07/03/2020 | 159 |
Entretanto, se consultarmos os tipos das colunas, através da dados.dtypes
, obteremos:
data object
vendas int64
Data é um objeto pois é assim que as strings são representadas no DataFrame.
Para transforma-las em datetimes, usaremos a função pd.to_datetime()
, que recebe uma Series e um formato e gera um objeto datetime a partir dessas informações. Veja o código abaixo:
dados.data = pd.to_datetime(dados.data, format='%d/%m/%Y')
O format
refere-se a como a data está indicada, sendo %d
o dia, %m
o mês e %Y
o ano com 4 dígitos.
Agora, a coluna data é composta por datetimes e podemos realizar a ordenação por valores:
dados.sort_values('data')
que retorna:
| data | vendas |
---|
1 | 04/03/2020 | 238 |
2 | 07/03/2020 | 159 |
0 | 28/02/2020 | 137 |
Espero ter ajudado!
Bons Estudos!!