0
votes

Comment se séparer par un délimiteur puis concaténer pour former une nouvelle chaîne basée sur une sous-chaîne dans les pandas?

J'ai une colonne en pandas avec des chemins de fichiers. Je veux diviser chaque chemin avec un délimiteur ("/"), trouve l'élément contenant une sous-chaîne particulière, puis concaténate enfin cet élément et tout à droite de cet élément.

Dans les deux exemples suivants, je souhaite retourner la sous-section du chemin de l'élément contenant ".eml" et tout à droite de celui-ci.

entrée: /abc0001/xyz-0001/doe_john/doe_john_20180912/201980912/0/doe-1.eml/top of Email / FWD: Sujet par courrier électronique

sortie: /doe-1.eml/top of Email / FWD: Sujet par courrier électronique

entrée: /abc12345/xyz-54321/xyz-54321/doe_jane/201980912/0/jane.eml/emails/top of Email / Re: Sujet par courrier électronique

sortie: /jane.eml/emails/top of Email / Re: Sujet par courrier électronique


0 commentaires

4 Réponses :


1
votes

Ce que vous devez faire est divisé à '/' puis rejoindre tous les éléments de la chaîne après ".eml". Vérifiez le code ci-dessous: xxx

sortie: xxx


0 commentaires

0
votes

Série Pandas Appliquer est votre ami ici. Faire une fonction personnalisée pour faire le travail et utiliser Appliquer pour l'appliquer sur chaque ligne de la colonne.

Supposons que vous souhaitiez enregistrer la sortie extraite dans une colonne appelée 'Sortie' < / code>: xxx

ici, dans le cas de non ". EML" est trouvé, la chaîne totale est renvoyée, modifiez le comportement en conséquence. Vos besoins (si vous êtes sûr que cela ne se produit jamais, vous pouvez déposer cette vérification).


0 commentaires

0
votes

Vous pouvez faire sans diviser et rejoindre en utilisant RFind : xxx


0 commentaires

0
votes

Utilisez REGEX:

>>> import re
>>> from pandas import DataFrame
>>> df = DataFrame({'Input': ['/ABC0001/XYZ-0001/Doe_John/Doe_John_20180912/201980912/0/Doe-1.eml/Top of Email/FWD: Email Subject', '/ABC12345/XYZ-54321/Doe_Jane/201980912/0/Jane.eml/Emails/Top of Email/RE: Email Subject']})
>>> def srs_reg(txt):
...     mask = "([a-zA-Z0-9-_.]+\.eml\/.*)"
...     return "/" + re.search(mask, text).group(1)
...
>>> df['Output'] = df['Input'].apply(srs_reg)
>>> df
                                               Input                                      Output
0  /ABC0001/XYZ-0001/Doe_John/Doe_John_20180912/2...  /Doe-1.eml/Top of Email/FWD: Email Subject
1  /ABC12345/XYZ-54321/Doe_Jane/201980912/0/Jane....  /Doe-1.eml/Top of Email/FWD: Email Subject


0 commentaires