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.
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
vous pouvez utiliser
s.str.contains('a', case = False)
SQL - WHERE nom_colonne LIKE 's%'
Python - nom_colonne.str.startswith ('s')
SQL - WHERE nom_colonne LIKE '% s'
Python - nom_colonne.str.endswith ('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