这是我的数据集
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', '::']]
我只想要第二栏,请提出一些建议?
答案 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.findall
和Series.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 ]