web-dev-qa-db-fra.com

Pandas correspondance de texte comme SQL LIKE?

Existe-t-il un moyen de faire quelque chose de similaire à syntaxe LIKE de SQL sur une colonne de texte DataFrame pandas, de sorte qu'elle renvoie une liste d'index ou une liste de booléens qui peut être utilisé pour l'indexation de la trame de données? Par exemple, je voudrais pouvoir faire correspondre toutes les lignes où la colonne commence par 'prefix_', similaire à WHERE <col> LIKE prefix_% en SQL.

23
naught101

Vous pouvez utiliser la méthode Series str.startswith (qui prend une expression régulière):

In [11]: s = pd.Series(['aa', 'ab', 'ca', np.nan])

In [12]: s.str.startswith('a', na=False)
Out[12]: 
0     True
1     True
2    False
3    False
dtype: bool

Vous pouvez également faire de même avec str.contains (en utilisant une expression régulière):

In [13]: s.str.contains('^a', na=False)
Out[13]: 
0     True
1     True
2    False
3    False
dtype: bool

Vous pouvez donc faire df[col].str.startswith...

Voir aussi la section de comparaison SQL de la documentation.

Remarque: (comme indiqué par OP) par défaut, les NaN se propageront (et donc provoqueront une erreur d'indexation si vous souhaitez utiliser le résultat comme un masque booléen), nous utilisons cet indicateur pour dire que NaN doit correspondre à False.

In [14]: s.str.startswith('a')  # can't use as boolean mask
Out[14]:
0     True
1     True
2    False
3      NaN
dtype: object
24
Andy Hayden

vous pouvez utiliser

s.str.contains('a', case = False)
3
sushmit
  1. Pour trouver toutes les valeurs de la série qui commence par un motif "s":

SQL - WHERE nom_colonne LIKE 's%'
Python - nom_colonne.str.startswith ('s')

  1. Pour rechercher toutes les valeurs de la série se terminant par un motif "s":

SQL - WHERE nom_colonne LIKE '% s'
Python - nom_colonne.str.endswith ('s')

  1. Pour rechercher toutes les valeurs de la série contenant le motif "s":

SQL - WHERE nom_colonne LIKE '% s%'
Python - nom_colonne.str.contains ('s')

Pour plus d'options, consultez: https://pandas.pydata.org/pandas-docs/stable/reference/series.html

0
H Raihan