1
votes

Comment savoir si une liste est une sous-chaîne d'une chaîne dans une colonne Dataframe?

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


2 commentaires

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?


3 Réponses :


1
votes

Utilisation de str.extract

                  A Found
0  ajbijio_ab_jadds    ab
1     bhjbj_ab_jiui    ab
2       Hello World   NaN

Sortie:

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)


0 commentaires

1
votes

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


0 commentaires

1
votes

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


0 commentaires