Pode usar a função DataFrame.where() da Bi­bli­o­teca Python Pandas para realizar ma­ni­pu­la­ções con­di­ci­o­nais de dados em Da­ta­Fra­mes. Esta função permite subs­ti­tuir ou mascarar valores num DataFrame do Pandas de acordo com uma condição es­pe­cí­fica.

Sintaxe do Pandas DataFrame.where()

A função where() aceita até cinco pa­râ­me­tros e segue a seguinte sintaxe básica:

DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None)
python

Esta função é aplicada a um DataFrame, e apenas os valores que cumprem a condição es­pe­ci­fi­cada (cond) per­ma­ne­cem inal­te­ra­dos. Todos os outros valores são subs­ti­tuí­dos pelos definidos em other.

Pa­râ­me­tros re­le­van­tes

O Pandas DataFrame.where() aceita vários pa­râ­me­tros que permitem uma ma­ni­pu­la­ção flexível dos dados:

Parâmetro Descrição Valor pre­de­fi­nido
cond Condição que deve ser cumprida para que os valores no DataFrame per­ma­ne­çam inal­te­ra­dos
other Valor pelo qual serão subs­ti­tuí­dos os valores que não cumprirem a condição
inplace Se for True, a operação é realizada di­re­ta­mente no DataFrame existente False
axis Es­pe­ci­fica em que eixo a condição é aplicada (axis=0 ou axis=1) None
level Es­pe­ci­fica em que nível do multi-índice a condição deve ser aplicada None

Como utilizar o Pandas DataFrame.where()

A função where() pode ser utilizada numa variedade de situações em que são ne­ces­sá­rias ma­ni­pu­la­ções con­di­ci­o­nais de dados. Isso inclui, por exemplo, a limpeza de dados ou a criação de novas colunas com base em condições.

Subs­ti­tui­ção con­di­ci­o­nal de valores

Su­po­nha­mos que tem um DataFrame com os re­sul­ta­dos de vendas de uma empresa e deseja mostrar apenas os re­sul­ta­dos positivos. Todos os re­sul­ta­dos negativos devem ser subs­ti­tuí­dos por 0. Isso pode ser feito com a função Pandas DataFrame.where(). Primeiro, crie o DataFrame:

import pandas as pd
# Crear un DataFrame de ejemplo
data = {
    'Región': ['Norte', 'Sur', 'Este', 'Oeste'],
    'Ventas_Q1': [15000, -5000, 3000, -1000],
    'Ventas_Q2': [20000, 25000, -7000, 5000]
}
df = pd.DataFrame(data)
print(df)
python

O código anterior gera o seguinte DataFrame:

Región  Ventas_Q1  Ventas_Q2
0    Norte        15000        20000
1      Sur        -5000        25000
2     Este         3000        -7000
3    Oeste        -1000         5000

Com uma chamada a where(), pode subs­ti­tuir todos os valores negativos por 0. No entanto, deve cer­ti­fi­car-se de con­si­de­rar apenas as colunas que contêm valores numéricos, caso contrário a com­pa­ra­ção não fun­ci­o­nará.

# Reemplazo condicional de valores
df_positive = df.copy()
df_positive[['Ventas_Q1', 'Ventas_Q2']] = df[['Ventas_Q1', 'Ventas_Q2']].where(df[['Ventas_Q1', 'Ventas_Q2']] > 0, 0)
print(df_positive)
python

O DataFrame re­sul­tante df_positive contém apenas os re­sul­ta­dos positivos das vendas e substitui os valores negativos por 0, conforme desejado:

Región     Ventas_Q1     Ventas_Q2
0    Norte          15000        20000
1      Sur                0        25000
2     Este            3000             0
3    Oeste                0         5000

Filtragem con­di­ci­o­nal de valores

O Pandas DataFrame.where() também pode ser usado para mascarar ou filtrar valores, ou seja, para mostrar apenas certas partes de um DataFrame. No exemplo a seguir, o DataFrame mostrará apenas os valores que estão acima de um limite es­pe­cí­fico (neste caso, 10000). Novamente, cer­ti­fi­que-se de que apenas as colunas numéricas sejam con­si­de­ra­das:

# Mostrar solo los valores mayores a 10000
df_masked = df.copy()
df_masked[['Ventas_Q1', 'Ventas_Q2']] = df[['Ventas_Q1', 'Ventas_Q2']].where(df[['Ventas_Q1', 'Ventas_Q2']] > 10000)
print(df_masked)
python

Neste caso, o DataFrame re­sul­tante df_masked mostra apenas os valores su­pe­ri­o­res a 10000. Todos os outros valores são apre­sen­ta­dos como NaN:

Región     Ventas_Q1     Ventas_Q2
0    Norte        15000.0        20000.0
1      Sur             NaN        25000.0
2     Este             NaN             NaN
3    Oeste             NaN             NaN
Ir para o menu principal