Pandas: procure uma string em todas as colunas do dataframe


Você pode usar a seguinte sintaxe para procurar uma string específica em cada coluna de um DataFrame do pandas e filtrar linhas contendo a string em pelo menos uma coluna:

 #define filter
mask = np. column_stack ([df[col]. str . contains (r " my_string ", na= False ) for col in df])

#filter for rows where any column contains 'my_string'
df. loc [mask. any (axis= 1 )]

O exemplo a seguir mostra como usar essa sintaxe na prática.

Exemplo: procure uma string em todas as colunas do Pandas DataFrame

Suponha que temos o seguinte DataFrame do pandas que contém informações sobre a primeira e a segunda função de vários jogadores de basquete em um time:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' player ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   ' first_role ': ['P Guard', 'P Guard', 'S Guard', 'S Forward',
                                  'P Forward', 'Center', 'Center', 'Center'],
                   ' second_role ': ['S Guard', 'S Guard', 'Forward', 'S Guard',
                                   'S Guard', 'S Forward', 'P Forward', 'P Forward']})

#view DataFrame
print (df)

  player first_role second_role
0 AP Guard S Guard
1 BP Guard S Guard
2 CS Guard Forward
3DS Forward S Guard
4 EP Forward S Guard
5 F Center S Forward
6 G Center P Forward
7 H Center P Forward

O código a seguir mostra como filtrar o DataFrame do pandas para linhas onde a string “Guard” aparece em qualquer coluna:

 import numpy as np

#define filter
mask = np. column_stack ([df[col]. str . contains (r " Guard ", na= False ) for col in df])

#filter for rows where any column contains 'Guard'
df. loc [mask. any (axis= 1 )]

        player first_role second_role
0 A P Guard S Guard
1 B P Guard S Guard
2 C S Guard Forward
3 D S Forward S Guard
4 E P Forward S Guard

Observe que cada linha do DataFrame resultante contém a string “Guard” em pelo menos uma coluna.

Você também pode filtrar linhas onde uma das várias strings aparece em pelo menos uma coluna usando o operador “OR” ( | ) no pandas.

Por exemplo, o código a seguir mostra como filtrar linhas onde “P Guard” ou “Center” aparece em pelo menos uma coluna:

 import numpy as np

#define filter
mask = np. column_stack ([df[col]. str . contains (r " P Guard|Center ", na= False ) for col in df])

#filter for rows where any column contains 'P Guard' or 'Center'
df. loc [mask. any (axis= 1 )]

        player first_role second_role
0 A P Guard S Guard
1 B P Guard S Guard
5 F Center S Forward
6 G Center P Forward
7 H Center P Forward

Observe que cada linha no DataFrame resultante contém “P Guard” ou “Center” em pelo menos uma coluna.

Nota : É importante incluir o argumento na=False na função container() caso contrário você encontrará um erro se valores NaN estiverem presentes no DataFrame.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras operações comuns de filtragem em pandas:

Como filtrar um DataFrame do Pandas por valores de coluna
Como filtrar linhas do Pandas DataFrame por data
Como filtrar um DataFrame do Pandas em múltiplas condições

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *