Python Извлечь числа после определенных строк - PullRequest
1 голос
/ 21 ноября 2019

У меня фрейм данных выглядит следующим образом

import pandas as pd
page = ['A','B','C','D']
URL = ['aaa.bbb3333.ccc.de12345.dddd.cccc','ccc2222.ddd.aaa.ho16589.ddd','ddd16893.aaa.de59875','aaa15875.ccc.ddd.ho13532']
df = pd.DataFrame({'page':page,'URL':URL})

Я хочу создать столбец, который извлекает числа после 'de' или 'ho'. Обратите внимание, что длина чисел может быть разной, а позиция 'de' или 'ho' также может быть разной.

Мой код выглядит следующим образом:

import re
def extract_number(df,url):
    for url in df:
        if df[url].str.contains('de', na = False) == True:
            match = re.search('de:P(\d+)')
        elif df[url].str.contains('ho', na = False) == True:
            match = re.search('ho:P(\d+)')
        else:
            match = 'not found'
        print(match)

out = extract_number(df, 'URL')

Возвращает ошибку«Истинная ценность Серии неоднозначна. Используйте a.empty, a.bool (), a.item (), a.any () или a.all (). '

Желаемый вывод должен выглядеть следующим образом:

import pandas as pd
page = ['A','B','C','D']
URL = ['aaa.bbb.ccc.de12345.dddd.cccc','ccc.ddd.aaa.ho16589.ddd','ddd.aaa.de59875','aaa.ccc.ddd.ho13532']
ID = ['12345','16589','59875','13532']
df = pd.DataFrame({'page':page,'URL':URL,'ID':ID})

Миллион спасибо !!!!

1 Ответ

2 голосов
/ 21 ноября 2019

Используйте str.extract с положительным взглядом:

df["num"] = df["URL"].str.extract(r"(?<=de|ho)(\d+)")

print (df)

#
  page                                URL    num
0    A  aaa.bbb3333.ccc.de12345.dddd.cccc  12345
1    B        ccc2222.ddd.aaa.ho16589.ddd  16589
2    C               ddd16893.aaa.de59875  59875
3    D           aaa15875.ccc.ddd.ho13532  13532
...