Je suis confronté au défi de trouver une sous-chaîne dans une liste à l'intérieur d'une colonne DataFrame
DF1['A'].str.lower().str.contains(list)
J'ai écrit quelque chose mais cela donne une erreur type nonchalable: 'list'
list =['ab', 'bc', 'ca'] DF1 Index|A 0 |ajbijio_ab_jadds 1 |bhjbj_ab_jiui Expected OUTPUT: DF ab ab
3 Réponses :
Utilisation de str.extract
Sortie: A Found
0 ajbijio_ab_jadds ab
1 bhjbj_ab_jiui ab
2 Hello World NaN
import pandas as pd
lst =['ab','bc','ca']
df = pd.DataFrame({"A": ["ajbijio_ab_jadds", "bhjbj_ab_jiui", "Hello World"]})
df["Found"] = df["A"].str.extract("(" + "|".join(lst) + ")")
print(df)
Utilisez la série .str.extract si besoin correspond d'abord uniquement avec la liste join par | pour l'expression régulière OU :
df['new'] = df['A'].str.findall('|'.join(L)).str.join(',')
Si besoin, toutes les correspondances, utilisez Series.str.findall avec Series.str.join :
L =['ab','bc','ca']
df['new'] = df['A'].str.extract('('+ '|'.join(L) + ')')
print (df)
A new
0 ajbijio_ab_jadds ab
1 bhjbj_ab_jiui ab
J'utilise findall
df["Found"] = df["A"].str.findall("|".join(lst)).str[0]
df
Out[82]:
A Found
0 ajbijio_ab_jadds ab
1 bhjbj_ab_jiui ab
2 Hello World NaN
quelle sortie voulez-vous s'il y a plusieurs correspondances dans la liste?
Vous dites sous-chaîne, mais peut-il s'agir d'une sous-chaîne de n'importe quelle partie de la chaîne, ou recherchez-vous des correspondances exactes à une sous-chaîne entière séparée par
_? Est-ce que'bh'serait considéré comme une correspondance pour la deuxième ligne?