Pular para o conteúdo

Como usar sortrows no Python

[

pandas Sort: Seu Guia para Ordenar Dados em Python

Por Spencer Guy 0 Comentários ciência de dados intermediário

Aprender os métodos de classificação do pandas é uma ótima maneira de começar ou praticar a realização de análises de dados básicas usando Python. Mais comumente, a análise de dados é feita com planilhas, SQL ou pandas. Uma das grandes vantagens do uso do pandas é que ele pode lidar com uma grande quantidade de dados e oferece recursos de manipulação de dados altamente eficientes.

Neste tutorial, você aprenderá como usar .sort_values() e .sort_index(), que permitirão que você ordene os dados de forma eficiente em um DataFrame.

Até o final deste tutorial, você saberá como:

  • Classificar um DataFrame do pandas pelos valores de uma ou mais colunas
  • Usar o parâmetro “ascending” para alterar a ordem de classificação
  • Classificar um DataFrame pelo seu índice usando .sort_index()
  • Organizar dados ausentes ao classificar valores
  • Classificar um DataFrame no local usando inplace definido como True

Para acompanhar este tutorial, você precisará de uma compreensão básica de DataFrames pandas e alguma familiaridade com a leitura de dados em arquivos.

Começando com os Métodos de Classificação do Pandas

Como lembrete rápido, um DataFrame é uma estrutura de dados tabular bidimensional, semelhante a uma planilha, onde os dados são organizados em linhas e colunas. O pandas é uma biblioteca do Python que fornece ferramentas poderosas para manipulação e análise de dados.

Vamos começar dando uma olhada na estrutura básica de um DataFrame pandas. Você pode criar um DataFrame a partir de uma série de maneiras, incluindo a partir de um arquivo CSV, de um dicionário Python ou até mesmo de um objeto SQL.

Para começar, você pode usar o método pd.DataFrame() e passar um dicionário Python contendo os dados que você deseja armazenar no DataFrame:

import pandas as pd
data = {"nome": ["João", "Maria", "Pedro"],
"idade": [25, 30, 20],
"cidade": ["São Paulo", "Rio de Janeiro", "Belo Horizonte"]}
df = pd.DataFrame(data)
print(df)

A saída será:

nomeidadecidade
0João25São Paulo
1Maria30Rio de Janeiro
2Pedro20Belo Horizonte

O DataFrame possui três colunas: “nome”, “idade” e “cidade”. Cada coluna é uma série, que é uma estrutura de dados unidimensional do pandas.

Agora, vamos ver como podemos classificar esse DataFrame pelos valores de uma coluna.

Preparando o Conjunto de Dados

Para demonstrar os métodos de classificação do pandas, vamos usar um conjunto de dados fictício contendo informações sobre cães e gatos, incluindo o nome, a idade e a espécie.

Podemos criar um DataFrame a partir desse conjunto de dados utilizando o seguinte código:

import pandas as pd
data = {
"Nome": ["Max", "Bella", "Charlie", "Lucy", "Leo"],
"Idade": [3, 5, 2, 4, 1],
"Espécie": ["Cão", "Gato", "Cão", "Gato", "Cão"]
}
df = pd.DataFrame(data)

Agora temos um DataFrame chamado “df” contendo as informações sobre os animais.

Conhecendo .sort_values()

O método .sort_values() é usado para classificar um DataFrame pelos valores de uma ou mais colunas. Ele pode receber vários parâmetros opcionais para personalizar a classificação.

Vamos começar classificando o DataFrame pelos nomes em ordem alfabética.

df_sorted = df.sort_values(by="Nome")

Neste exemplo, nós especificamos o parâmetro “by” e passamos o nome da coluna pela qual queremos ordenar o DataFrame.

Agora, se exibirmos o DataFrame classificado, veremos que ele está ordenado em ordem alfabética pelos nomes:

print(df_sorted)

A saída será:

NomeIdadeEspécie
2Charlie2Cão
1Bella5Gato
4Leo1Cão
3Lucy4Gato
0Max3Cão

Conhecendo .sort_index()

O método .sort_index() é usado para classificar um DataFrame com base em seu índice. Assim como o .sort_values(), ele também pode receber parâmetros opcionais para personalizar a classificação.

Vamos classificar o DataFrame pelo índice em ordem decrescente.

df_sorted = df.sort_index(ascending=False)

Neste exemplo, nós especificamos o parâmetro “ascending” e definimos como False para ordenar em ordem decrescente.

Agora, se exibirmos o DataFrame classificado, veremos que ele está ordenado pelo índice em ordem decrescente:

print(df_sorted)

A saída será:

NomeIdadeEspécie
4Leo1Cão
3Lucy4Gato
2Charlie2Cão
1Bella5Gato
0Max3Cão

Classificando seu DataFrame em uma única coluna

Agora que entendemos os conceitos básicos de classificação no pandas, vamos explorar como podemos classificar um DataFrame com base nos valores de uma única coluna.

Classificando por uma coluna em ordem crescente

Para classificar um DataFrame com base nos valores de uma única coluna em ordem crescente, podemos usar o método .sort_values() e especificar a coluna pelo parâmetro “by”.

Vamos classificar o DataFrame pelo nome dos animais em ordem crescente:

df_sorted = df.sort_values(by="Nome")

Agora, se exibirmos o DataFrame classificado, veremos que ele está ordenado em ordem alfabética pelos nomes:

print(df_sorted)

A saída será:

NomeIdadeEspécie
2Charlie2Cão
1Bella5Gato
4Leo1Cão
3Lucy4Gato
0Max3Cão

Alterando a ordem de classificação

Podemos alterar a ordem de classificação utilizando o parâmetro “ascending”. Se definirmos como False, o DataFrame será classificado em ordem decrescente.

Vamos classificar o DataFrame pelo nome dos animais em ordem decrescente:

df_sorted = df.sort_values(by="Nome", ascending=False)

Agora, se exibirmos o DataFrame classificado, veremos que ele está ordenado em ordem alfabética decrescente pelos nomes:

print(df_sorted)

A saída será:

NomeIdadeEspécie
0Max3Cão
3Lucy4Gato
4Leo1Cão
1Bella5Gato
2Charlie2Cão

Escolhendo um algoritmo de classificação

O método .sort_values() do pandas usa um algoritmo de classificação chamado Timsort, que é um algoritmo híbrido baseado em merge sort e insertion sort. Ele é altamente eficiente e garante uma ordenação estável, ou seja, preserva a ordem relativa dos elementos com chaves iguais.

O algoritmo Timsort é ideal para a maioria dos casos, mas em algumas situações específicas você pode querer escolher um algoritmo de classificação diferente. O pandas oferece suporte a outros algoritmos de classificação, incluindo “quicksort” e “heapsort”.

Para escolher um algoritmo de classificação específico, você pode utilizar o parâmetro “kind” do método .sort_values(). Por exemplo, para classificar o DataFrame usando o algoritmo quicksort, você pode fazer:

df_sorted = df.sort_values(by="Nome", kind="quicksort")

Da mesma forma, você também pode usar “heapsort” para classificar o DataFrame usando o algoritmo heapsort.

É importante observar que os algoritmos “quicksort” e “heapsort” podem não garantir uma ordenação estável como o Timsort, portanto, a escolha do algoritmo dependerá da sua necessidade específica.

Classificando seu DataFrame em várias colunas

Além de classificar um DataFrame com base em uma única coluna, o pandas também oferece a capacidade de classificá-lo com base em várias colunas. Isso é útil quando você deseja classificar primeiro por uma coluna e, em seguida, por outra coluna em caso de empate.

Classificando por várias colunas em ordem crescente

Para classificar um DataFrame por várias colunas em ordem crescente, você pode passar uma lista de colunas para o parâmetro “by” do método .sort_values().

Vamos classificar o DataFrame primeiramente pelo nome da espécie em ordem crescente e, em seguida, pelo nome dos animais em ordem crescente:

df_sorted = df.sort_values(by=["Espécie", "Nome"])

Agora, se exibirmos o DataFrame classificado, veremos que ele está ordenado primeiro pelo nome da espécie em ordem crescente e, em seguida, pelo nome dos animais em ordem crescente:

print(df_sorted)

A saída será:

NomeIdadeEspécie
1Bella5Gato
3Lucy4Gato
2Charlie2Cão
0Max3Cão
4Leo1Cão

Alterando a ordem de classificação das colunas

Você também pode especificar a ordem de classificação das colunas passando uma lista de valores booleanos para o parâmetro “ascending”.

Vamos classificar o DataFrame primeiro pelo nome da espécie em ordem decrescente e, em seguida, pelo nome dos animais em ordem crescente:

df_sorted = df.sort_values(by=["Espécie", "Nome"], ascending=[False, True])

Agora, se exibirmos o DataFrame classificado, veremos que ele está ordenado primeiro pelo nome da espécie em ordem decrescente e, em seguida, pelo nome dos animais em ordem crescente:

print(df_sorted)

A saída será:

NomeIdadeEspécie
0Max3Cão
2Charlie2Cão
4Leo1Cão
3Lucy4Gato
1Bella5Gato

Classificando por várias colunas em ordem decrescente

Da mesma forma, também podemos classificar o DataFrame por várias colunas em ordem decrescente.

Vamos classificar o DataFrame primeiro pelo nome da espécie em ordem decrescente e, em seguida, pelo nome dos animais em ordem decrescente:

df_sorted = df.sort_values(by=["Espécie", "Nome"], ascending=[False, False])

Agora, se exibirmos o DataFrame classificado, veremos que ele está ordenado primeiro pelo nome da espécie em ordem decrescente e, em seguida, pelo nome dos animais em ordem decrescente:

print(df_sorted)

A saída será:

NomeIdadeEspécie
1Bella5Gato
3Lucy4Gato
2Charlie2Cão
0Max3Cão
4Leo1Cão

Classificando por várias colunas com diferentes ordens de classificação

É possível classificar o DataFrame por várias colunas com diferentes ordens de classificação. Por exemplo, você pode classificar a primeira coluna em ordem crescente e a segunda coluna em ordem decrescente.

Vamos classificar o DataFrame primeiro pelo nome da espécie em ordem crescente e, em seguida, pelo nome dos animais em ordem decrescente:

df_sorted = df.sort_values(by=["Espécie", "Nome"], ascending=[True, False])

Agora, se exibirmos o DataFrame classificado, veremos que ele está ordenado primeiro pelo nome da espécie em ordem crescente e, em seguida, pelo nome dos animais em ordem decrescente:

print(df_sorted)

A saída será:

NomeIdadeEspécie
0Max3Cão
2Charlie2Cão
4Leo1Cão
3Lucy4Gato
1Bella5Gato

Classificando seu DataFrame pelo Índice

Além de classificar um DataFrame com base nas colunas, também é possível classificá-lo com base em seu índice. Essa abordagem é útil quando você deseja classificar o DataFrame com base em sua ordem original ou em uma coluna específica que contenha os índices.

Classificando pelo índice em ordem crescente

Para classificar um DataFrame pelo seu índice em ordem crescente, podemos usar o método .sort_index(). Por padrão, ele classifica o DataFrame em ordem crescente com base no índice.

Vamos classificar o DataFrame pelo índice em ordem crescente:

df_sorted = df.sort_index()

Agora, se exibirmos o DataFrame classificado, veremos que ele está ordenado pelo índice em ordem crescente:

print(df_sorted)

A saída será:

NomeIdadeEspécie
0Max3Cão
1Bella5Gato
2Charlie2Cão
3Lucy4Gato
4Leo1Cão

Classificando pelo índice em ordem decrescente

Da mesma forma, também podemos classificar um DataFrame pelo seu índice em ordem decrescente.

Vamos classificar o DataFrame pelo índice em ordem decrescente:

df_sorted = df.sort_index(ascending=False)

Agora, se exibirmos o DataFrame classificado, veremos que ele está ordenado pelo índice em ordem decrescente:

print(df_sorted)

A saída será:

NomeIdadeEspécie
4Leo1Cão
3Lucy4Gato
2Charlie2Cão
1Bella5Gato
0Max3Cão

Explorando Conceitos Avançados de Classificação de Índice

O método .sort_index() também oferece suporte a alguns conceitos avançados de classificação do índice do DataFrame, como classificação por alguns níveis do Índice MultiIndex e classificação pelo índice invertido.

Esses conceitos são mais avançados e são úteis quando você está trabalhando com DataFrames complexos e estruturas de índice hierárquicas. Para saber mais sobre esses conceitos, você pode consultar a documentação oficial do pandas.

Classificando as Colunas do Seu DataFrame

Além de classificar um DataFrame com base nas linhas e no índice, é possível classificar as colunas do DataFrame. No pandas, as colunas de um DataFrame são representadas como uma série, então podemos usar os mesmos métodos de classificação que usamos para as linhas.

Trabalhando com o eixo do DataFrame

Antes de começarmos a classificar as colunas do DataFrame, é importante entender o conceito de eixo no pandas. O eixo é usado para especificar a direção ao longo da qual uma operação deve ser realizada.

Em um DataFrame, o eixo 0 se refere às linhas e o eixo 1 se refere às colunas. Ao realizar operações gerais em um DataFrame, como somar os valores de uma coluna ou calcular a média das linhas, você especificará o eixo desejado.

Por exemplo, se quisermos calcular a média das linhas de um DataFrame, passamos o valor 0 para o parâmetro axis do método .mean():

avg_rows = df.mean(axis=0)

Da mesma forma, se quisermos calcular a média das colunas de um DataFrame, passamos o valor 1 para o parâmetro axis do método .mean():

avg_columns = df.mean(axis=1)

Usando os rótulos das colunas para classificar

Para classificar as colunas do DataFrame, podemos usar os rótulos das colunas em vez dos nomes. Podemos fazer isso transpondo o DataFrame, que troca as colunas pelas linhas, e então classificamos as linhas usando um dos métodos de classificação que discutimos anteriormente.

Vamos classificar as colunas do DataFrame pelo nome dos animais em ordem crescente:

df_sorted = df.transpose().sort_values(by=0).transpose()

Aqui, estamos usando o método .transpose() para trocar as colunas pelas linhas, classificamos as linhas pelo nome dos animais usando o parâmetro “by” do método .sort_values() e, em seguida, retornamos as colunas para sua posição original usando o método .transpose() novamente.

Agora, se exibirmos o DataFrame classificado, veremos que ele está ordenado pelo nome dos animais em ordem crescente:

print(df_sorted)

A saída será:

EspécieIdadeNome
2Cão2Charlie
1Gato5Bella
4Cão1Leo
3Gato4Lucy
0Cão3Max

Trabalhando com Dados Ausentes ao Classificar no Pandas

Ao trabalhar com dados em um DataFrame, é comum encontrar valores ausentes ou nulos. O pandas trata valores ausentes como NaN (Not a Number) e fornece várias maneiras de lidar com eles durante a classificação.

Compreendendo o parâmetro na_position em .sort_values()

Quando classificamos um DataFrame usando o método .sort_values(), temos a opção de especificar como os valores ausentes devem ser tratados. Podemos usar o parâmetro “na_position” para controlar o comportamento do método em relação aos valores ausentes.

  • ”first”: os valores ausentes são classificados no início do DataFrame
  • ”last”: os valores ausentes são classificados no final do DataFrame

Por padrão, o valor de “na_position” é definido como “last”.

Vamos dar uma olhada em como funciona.

Suponha que temos o seguinte DataFrame com valores ausentes:

NomeIdadeEspécie
0Max3Cão
1BellaNaNGato
2Charlie2Cão
3NaN4Gato
4Leo1Cão

Vamos classificar o DataFrame pelo nome em ordem crescente:

df_sorted = df.sort_values(by="Nome")

Se exibirmos o DataFrame classificado, veremos que os valores ausentes são classificados no final:

NomeIdadeEspécie
2Charlie2Cão
1BellaNaNGato
4Leo1Cão
0Max3Cão
3NaN4Gato

Agora, vamos classificar o DataFrame pelo nome em ordem crescente com os valores ausentes no início:

df_sorted = df.sort_values(by="Nome", na_position="first")

Se exibirmos o DataFrame classificado, veremos que os valores ausentes são classificados no início:

NomeIdadeEspécie
3NaN4Gato
1BellaNaNGato
2Charlie2Cão
4Leo1Cão
0Max3Cão

Da mesma forma, podemos usar “na_position” para classificar um DataFrame pelo índice.

Compreendendo o parâmetro na_position em .sort_index()

O método .sort_index() também oferece suporte ao parâmetro “na_position” para tratar os valores ausentes. Da mesma forma, podemos usar os valores “first” e “last” para classificar os valores ausentes no início ou no final do DataFrame.

Vamos ver como isso funciona.

Suponha que temos o seguinte DataFrame com valores ausentes no índice:

NomeIdadeEspécie
0Max3Cão
1Bella5Gato
2CharlieNaNCão
3Lucy4Gato
4LeoNaNCão

Vamos classificar o DataFrame pelo índice em ordem crescente:

df_sorted = df.sort_index()

Se exibirmos o DataFrame classificado, veremos que os valores ausentes são classificados no final:

NomeIdadeEspécie
0Max3Cão
1Bella5Gato
2CharlieNaNCão
3Lucy4Gato
4LeoNaNCão

Agora, vamos classificar o DataFrame pelo índice em ordem crescente com os valores ausentes no início:

df_sorted = df.sort_index(ascending=True, na_position="first")

Se exibirmos o DataFrame classificado, veremos que os valores ausentes são classificados no início:

NomeIdadeEspécie
2CharlieNaNCão
4LeoNaNCão
0Max3Cão
1Bella5Gato
3Lucy4Gato

Usando Métodos de Classificação para Modificar seu DataFrame

Além de criar um novo DataFrame classificado, o pandas também oferece suporte a métodos para modificar o DataFrame original.

Usando .sort_values() In Place

O método .sort_values() do pandas tem um parâmetro chamado “inplace” que permite classificar o DataFrame original sem criar um novo DataFrame.

Vamos usar o método .sort_values() in place para classificar o DataFrame pelo nome em ordem crescente:

df.sort_values(by="Nome", inplace=True)

Agora, se exibirmos o DataFrame, veremos que ele está classificado pelo nome em ordem crescente:

print(df)

A saída será:

NomeIdadeEspécie
2Charlie2Cão
1BellaNaNGato
4Leo1Cão
0Max3Cão
3NaN4Gato

Observe que ao usar o parâmetro “inplace”, o DataFrame é modificado diretamente e não retorna nada.

Usando .sort_index() In Place

Da mesma forma, o método .sort_index() também tem o parâmetro “inplace” para classificar o DataFrame original sem criar um novo DataFrame.

Vamos usar o método .sort_index() in place para classificar o DataFrame pelo índice em ordem crescente:

df.sort_index(inplace=True)

Agora, se exibirmos o DataFrame, veremos que ele está classificado pelo índice em ordem crescente:

print(df)

A saída será:

NomeIdadeEspécie
0Max3Cão
1BellaNaNGato
2Charlie2Cão
3NaN4Gato
4Leo1Cão

Da mesma forma que o método .sort_values(), o parâmetro “inplace” modifica o DataFrame original sem retornar nada.

Conclusão

Neste tutorial, você aprendeu como usar os métodos .sort_values() e .sort_index() do pandas para classificar um DataFrame com base nos valores das colunas e no índice, respectivamente. Você também aprendeu como classificar um DataFrame por uma ou várias colunas em ordem crescente ou decrescente.

Além disso, você aprendeu como lidar com dados ausentes durante a classificação usando os parâmetros “na_position” e “inplace”. Esses recursos do pandas facilitam a classificação de dados e a organização de suas análises de dados.

Agora você tem as ferramentas necessárias para começar a classificar e explorar seus próprios conjuntos de dados usando o pandas. Tenha em mente que a classificação de dados é uma habilidade essencial para qualquer cientista de dados e profissional de análise de dados.