Aprimorando a Seleção, Filtragem e Agrupamento de Dados no Pandas
Tags: python, pandas, programming, datascience
Published: 2023-07-10 09:03:01

Ao longo dos meus estudos, percebi que o processo de seleção, filtragem e agrupamento de dados dentro de um dataframe no Pandas pode ser um tanto confuso. Com o intuito de me orientar melhor e compartilhar esse conhecimento, decidi escrever este artigo, que aborda estratégias eficientes para realizar consultas precisas.

Selecionar, filtrar e agrupar dados são habilidades fundamentais para explorar e analisar conjuntos de dados usando a biblioteca Pandas no Python. Essas operações permitem extrair informações relevantes e responder a perguntas específicas sobre os dados. No entanto, o processo pode se tornar desafiador se não soubermos as melhores práticas.

Vamos começar falando sobre a seleção de dados. O Pandas oferece várias formas de selecionar colunas e linhas específicas dentro de um dataframe. Podemos usar a notação de colchetes para selecionar uma única coluna ou uma lista de colunas. Além disso, podemos utilizar o método `.loc[]` para selecionar linhas e colunas com base em rótulos, ou o método `.iloc[]` para selecionar com base em índices numéricos.

A filtragem de dados é outra tarefa comum no Pandas. Podemos utilizar condições lógicas para filtrar linhas que atendam a certos critérios. Por exemplo, podemos criar uma máscara booleana e aplicá-la ao dataframe para manter apenas as linhas que satisfazem a condição desejada. Podemos combinar várias condições usando os operadores lógicos `& (e) e | (ou)`.

Já o agrupamento de dados é útil quando queremos analisar padrões ou calcular estatísticas em subconjuntos dos nossos dados. Podemos agrupar o dataframe por uma ou mais colunas e, em seguida, aplicar funções de agregação, como soma, média, máximo ou mínimo, aos grupos resultantes. O método `.groupby()` do Pandas facilita esse processo, permitindo-nos segmentar os dados com base em critérios específicos.

Durante este artigo, exploraremos exemplos práticos de seleção, filtragem e agrupamento de dados, usando diferentes abordagens disponíveis no Pandas. Também discutiremos boas práticas e considerações importantes para garantir a eficiência e a precisão das nossas consultas.

Ao compreender e dominar essas habilidades, você poderá aproveitar ao máximo a biblioteca Pandas e tirar insights valiosos dos seus conjuntos de dados. Acompanhe este artigo para aprofundar seus conhecimentos e aprender estratégias poderosas para manipular dados de forma eficiente no Pandas.

Abaixo trago alguns exemplos para facilitar seu entendimento sobre esse tema.

---

## **Seleção de Dados:**



1 -  Selecionar uma coluna específica:
```python
df['nome_coluna']
```

2 - Selecionar várias colunas:
```python
df[['coluna1', 'coluna2', 'coluna3']]
```

3 - Selecionar linhas com base em um critério:
```python
df[df['coluna'] > valor]
```

4 - Selecionar linhas que atendam a várias condições:
```python
df[(df['coluna1'] > valor1) & (df['coluna2'] < valor2)]
```

5 - Selecionar linhas com base em rótulos (usando `.loc[]`):
```python
df.loc[rotulo_linha]
```

6 - Selecionar linhas e colunas com base em rótulos:
```python
df.loc[rotulo_linha, 'nome_coluna']
```

7 - Selecionar linhas com base em índices numéricos (usando `.iloc[]`):
```python
df.iloc[indice]
```

8 - Selecionar linhas e colunas com base em índices numéricos:
```python
df.iloc[indice_linha, indice_coluna]
```

Esses são apenas alguns exemplos básicos de seleção de dados no Pandas. A biblioteca oferece muitas outras opções e funcionalidades poderosas para manipulação de dados. É importante explorar a documentação oficial do Pandas para obter mais informações sobre as diferentes formas de selecionar dados de acordo com suas necessidades específicas.

---

## **Agrupamento de Dados:**

1 - Agrupar por uma coluna e calcular a média de outra coluna:
```python
df.groupby('coluna_grupo')['coluna_media'].mean()
```

2 - Agrupar por várias colunas e calcular a soma de outra coluna:
```python
df.groupby(['coluna1', 'coluna2'])['coluna_soma'].sum()
```

3 - Agrupar por uma coluna e contar o número de ocorrências em outra coluna:
```python
df.groupby('coluna_grupo')['coluna_contagem'].count()
```

4 - Agrupar por uma coluna e calcular múltiplas estatísticas em outra coluna:
```python
df.groupby('coluna_grupo')['coluna_estatisticas'].agg(['mean', 'sum', 'max', 'min'])
```

5 - Agrupar por uma coluna e aplicar uma função personalizada a outra coluna:
```python
def minha_funcao(x):
    return x.max() - x.min()

df.groupby('coluna_grupo')['coluna_personalizada'].apply(minha_funcao)
```

6 - Agrupar por uma coluna e aplicar diferentes funções a diferentes colunas:
```python
agregacoes = {
    'coluna1': 'mean',
    'coluna2': 'sum',
    'coluna3': lambda x: x.max() - x.min()
}

df.groupby('coluna_grupo').agg(agregacoes)
```

Esses são apenas alguns exemplos básicos de agrupamento de dados no Pandas. Você pode combinar diferentes funções de agregação, aplicar funções personalizadas e explorar ainda mais a biblioteca para realizar agrupamentos complexos. A documentação oficial do Pandas é uma ótima fonte de informações adicionais sobre todas as opções disponíveis para agrupamento de dados.

---

## **Filtragem de Dados:**

Certamente! Aqui estão alguns exemplos de filtragem de dados com Python e pandas:

1 - Filtrar linhas com base em uma condição específica:
```python
import pandas as pd

# Criar um DataFrame de exemplo
data = {'Nome': ['Alice', 'Bob', 'Charlie', 'Dave'],
        'Idade': [25, 30, 35, 40]}
df = pd.DataFrame(data)

# Filtrar linhas com idade maior que 30
df_filtrado = df[df['Idade'] > 30]
print(df_filtrado)
```
Saída:
```
      Nome  Idade
2  Charlie     35
3     Dave     40
```

2 - Filtrar linhas usando o método `isin`:
```python
# Filtrar linhas com nomes específicos
nomes_filtrados = ['Alice', 'Dave']
df_filtrado = df[df['Nome'].isin(nomes_filtrados)]
print(df_filtrado)
```
Saída:
```
   Nome  Idade
0  Alice     25
3   Dave     40
```

3 - Filtrar linhas que contêm uma determinada string:
```python
# Filtrar linhas com nomes que contêm 'b'
df_filtrado = df[df['Nome'].str.contains('b', case=False)]
print(df_filtrado)
```
Saída:
```
    Nome  Idade
1    Bob     30
2  Charlie     35
```

4 - Filtrar linhas com valores ausentes:
```python
import numpy as np

# Adicionar valores ausentes ao DataFrame
df.loc[1, 'Idade'] = np.nan

# Filtrar linhas com valores ausentes
df_filtrado = df[df['Idade'].isnull()]
print(df_filtrado)
```
Saída:
```
    Nome  Idade
1    Bob    NaN
```

5 - Utilizando `not in` para filtrar linhas:
```python
import pandas as pd

# Criar um DataFrame de exemplo
data = {'Nome': ['Alice', 'Bob', 'Charlie', 'Dave'],
        'Idade': [25, 30, 35, 40]}
df = pd.DataFrame(data)

# Filtrar linhas onde o nome não esteja em uma lista
nomes_excluidos = ['Alice', 'Charlie']
df_filtrado = df[~df['Nome'].isin(nomes_excluidos)]
print(df_filtrado)
```
Saída:
```
   Nome  Idade
1   Bob     30
3  Dave     40
```

6 - Utilizando `query` para filtrar linhas com uma expressão booleana:
```python
# Filtrar linhas onde a idade seja maior que 30
df_filtrado = df.query('Idade > 30')
print(df_filtrado)
```
Saída:
```
      Nome  Idade
2  Charlie     35
3     Dave     40
```

7 - Utilizando `where` para filtrar linhas com uma condição:
```python
# Filtrar linhas onde a idade seja menor ou igual a 30
df_filtrado = df.where(df['Idade'] <= 30)
print(df_filtrado)
```
Saída:
```
    Nome  Idade
0  Alice   25.0
1    Bob   30.0
2    NaN    NaN
3    NaN    NaN
```

8 - Utilizando `loc` para filtrar linhas e selecionar colunas:
```python
# Filtrar linhas onde a idade seja maior que 30 e selecionar apenas a coluna 'Nome'
df_filtrado = df.loc[df['Idade'] > 30, 'Nome']
print(df_filtrado)
```
Saída:
```
2    Charlie
3       Dave
Name: Nome, dtype: object
```

9 - Utilizando `like` para filtrar linhas usando padrões de texto:
```python
# Filtrar linhas onde o nome comece com 'A'
df_filtrado = df[df['Nome'].str.like('A%')]
print(df_filtrado)
```
Saída:
```
   Nome  Idade
0  Alice     25
```


Esses são apenas alguns exemplos básicos de filtragem de dados com pandas. A biblioteca oferece uma ampla gama de opções e recursos para manipulação e filtragem de dados. Você pode combinar múltiplas condições, usar operadores lógicos, expressões regulares e até mesmo criar suas próprias funções personalizadas para filtrar os dados de acordo com suas necessidades específicas.


---

Espero que tenha ajudado a você a entender melhor sobre seleção, agrupamento e filtragem de dados.