如何在某些字符之间提取单词

时间:2019-03-28 06:45:09

标签: python regex pandas dataframe

这是我的数据集

      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 个答案:

答案 0 :(得分:3)

如果地址始终为address=/000007.ru/0.0.0.0,并且您想每次不使用时都提取第二列:

website = address.split('/')[1]

答案 1 :(得分:3)

您可以使用Series.str.extract

DAG B

正则表达式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'/(.+)/'之间重复一次或多次的任何字符

答案 2 :(得分:2)

如果要提取第一个匹配的值,请使用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.findallSeries.str.join

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

如果需要除以/后的第二个值,请使用Series.str.split进行索引:

df['website'] = df['domainname'].str.split('/').str[1]

答案 3 :(得分:2)

def f(y):    
  return [ x[1] for x in y ]