Как извлечь слова между определенными символами - PullRequest
1 голос
/ 28 марта 2019

Вот мои наборы данных

      domainname
0     address=/000007.ru/0.0.0.0
1     address=/000007.ru/::
2     address=/000free.us/0.0.0.0
3     address=/000free.us/::

Я хочу извлечь слово между / и /, чтобы получить желаемый результат

      domainname                        website
0     address=/000007.ru/0.0.0.0        000007.ru
1     address=/000007.ru/::             000007.ru
2     address=/000free.us/0.0.0.0       000free.us
3     address=/000free.us/::            000free.us

Вот что я пытаюсь

adsdata_vector = df["domainname"]
ads = []
for i in range(len(adsdata)):
   ads.append(re.split(r"[/]+",adsdata_vector[i]))
ads[0:4]

Вот что я получаю

[['address=', '000007.ru', '0.0.0.0'],
['address=', '000007.ru', '::'],
['address=', '000free.us', '0.0.0.0'],
['address=', '000free.us', '::']]

Мне нужен только второй столбец, пожалуйста, предложите что-нибудь?

Ответы [ 4 ]

3 голосов
/ 28 марта 2019

Вы можете использовать Series.str.extract :

df['website'] = df.domainname.str.extract(r'/(.+)/')

      domainname                        website
0     address=/000007.ru/0.0.0.0        000007.ru
1     address=/000007.ru/::             000007.ru
2     address=/000free.us/0.0.0.0       000free.us
3     address=/000free.us/::            000free.us

Регулярное выражение r'/(.+)/' найдет любой символ, повторенный один или несколько раз между двумя /

3 голосов
/ 28 марта 2019

, если адрес всегда address=/000007.ru/0.0.0.0 и вы хотите извлекать второй столбец каждый раз, почему бы не использовать:

website = address.split('/')[1]
2 голосов
/ 28 марта 2019
def f(y):    
  return [ x[1] for x in y ]
2 голосов
/ 28 марта 2019

Если хотите извлечь первые совпадающие значения, используйте Series.str.extract:

df['website'] = df['domainname'].str.extract('/(.*?)/')
print (df)
                    domainname     website
0   address=/000007.ru/0.0.0.0   000007.ru
1        address=/000007.ru/::   000007.ru
2  address=/000free.us/0.0.0.0  000free.us
3       address=/000free.us/::  000free.us

Или, если нужно, все совпадающие значения используйте Series.str.findall с Series.str.join:

df['website'] = df['domainname'].str.findall('/(.*?)/').str.join(', ')

Если нужно только второе значение после разбиения на /, используйте Series.str.split с индексированием:

df['website'] = df['domainname'].str.split('/').str[1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...