我有一个这样的数据框:
name link
apple example1.com/dsa/es?id=2812168&width=1200/web/map&resize.html
banana. example2.com/es?id=28132908&width=1220/web/map_resize.html
orange. example3.com/es?id=3209908&width=1120/web&map_resize.html
每个名称的ID都埋在链接中,链接的结构可能不同。但是,我知道模式是'id ='+'我想要什么'+'&'
我想知道,是否有一种方法可以从id
中提取link
并将其放回数据框以获取以下内容:
name link
apple 2812168
banana. 28132908
orange. 3209908
我尝试使用它:
df['name'] = df['name'].str.extract(r'id=\s*([^\.]*)\s*\\&', expand=False)
但它返回包含所有nan
此外,链接中可能有多个&
答案 0 :(得分:2)
我们可以使用positive lookbehind
和positive lookahead
:
df['link'] = df['link'].str.extract('(?<=id\=)(.*?)(?=\&)')
name link
0 apple 2812168
1 banana. 28132908
2 orange. 3209908
详细信息:
(?<=id\=)
:对id=
的积极回望(.*)
:一切(?=\&width)
:积极回顾&width
答案 1 :(得分:2)
我认为Ids始终是数字,因此这有点干净:
df["link"] = df['link'].str.extract(r'id=(\d+)&', expand=False)
print(df)
# name link
#0 apple 2812168
#1 banana 28132908
#2 orange 3209908
答案 2 :(得分:2)
让三split
df['link'].str.split('id=').str[1].str.split('&').str[0]
0 2812168
1 28132908
2 3209908
Name: link, dtype: object