Panda's: zoek naar een string in alle kolommen van dataframe
U kunt de volgende syntaxis gebruiken om naar een bepaalde tekenreeks in elke kolom van een Pandas DataFrame te zoeken en te filteren op rijen die de tekenreeks in ten minste één kolom bevatten:
#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 )]
Het volgende voorbeeld laat zien hoe u deze syntaxis in de praktijk kunt gebruiken.
Voorbeeld: zoek naar een string in alle kolommen van Pandas DataFrame
Stel dat we het volgende panda’s DataFrame hebben dat informatie bevat over de eerste rol en tweede rol van verschillende basketbalspelers in een team:
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
De volgende code laat zien hoe u het Panda DataFrame filtert op rijen waarin de tekenreeks ‚Guard‘ in een willekeurige kolom voorkomt:
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
Houd er rekening mee dat elke rij van het resulterende DataFrame de tekenreeks ‚Guard‘ in ten minste één kolom bevat.
U kunt ook rijen filteren waarin een van meerdere tekenreeksen in ten minste één kolom voorkomt door de operator „OR“ ( | ) in panda’s te gebruiken.
De volgende code laat bijvoorbeeld zien hoe u rijen filtert waarin ‚P Guard‘ of ‚Center‘ in ten minste één kolom voorkomt:
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
Houd er rekening mee dat elke rij in het resulterende DataFrame „P Guard“ of „Center“ in ten minste één kolom bevat.
Let op : Het is belangrijk om het argument na=False op te nemen in de functie contain() anders zul je een fout tegenkomen als NaN-waarden aanwezig zijn in het DataFrame.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende filterbewerkingen in panda’s kunt uitvoeren:
Hoe u een Pandas DataFrame filtert op kolomwaarden
Hoe Pandas DataFrame-rijen op datum kunnen worden gefilterd
Hoe u een Pandas DataFrame op meerdere voorwaarden kunt filteren