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. P>
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. p>
4 Réponses :
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: sortie: p>
Série Pandas Appliquer est votre ami ici. Faire une fonction personnalisée pour faire le travail et utiliser Supposons que vous souhaitiez enregistrer la sortie extraite dans une colonne appelée ici, dans le cas de non Appliquer code> pour l'appliquer sur chaque ligne de la colonne. 'Sortie' < / code>: p> ". EML" code> 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). P> p>
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