Python 从字符串列中提取子字符串

Python 从字符串列中提取子字符串,python,pandas,string,Python,Pandas,String,我有这样一个数据帧: 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.htm

我有这样一个数据帧:

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
,并将其放回数据帧以获得以下内容:

name      link
apple    2812168
banana.  28132908
orange.  3209908
我试着用这个:

df['name'] = df['name'].str.extract(r'id=\s*([^\.]*)\s*\\&', expand=False)
但它返回一列,其中包含all
nan


此外,在链接中可能有多个&p>我们可以使用
正向后向
正向前向

df['link'] = df['link'].str.extract('(?<=id\=)(.*?)(?=\&)')


      name      link
0    apple   2812168
1  banana.  28132908
2  orange.   3209908

df['link']=df['link'].str.extract('(?我认为ID总是数字,所以这有点简洁:

df["link"] = df['link'].str.extract(r'id=(\d+)&', expand=False)
print(df)
#     name      link
#0   apple   2812168
#1  banana  28132908
#2  orange   3209908

让tri
拆分

df['link'].str.split('id=').str[1].str.split('&').str[0]
0     2812168
1    28132908
2     3209908
Name: link, dtype: object

谢谢!我应该提到,id后面不总是
&width
。如果我使用
df['link']=df['link'].str.extract(“(?是的,通过使用所谓的“非贪婪”选项,它似乎不起作用。”操作员,请注意
*?
,请参见编辑。请注意,如果某一点的id应包含字母数字值,则接受的解决方案将不起作用。谢谢!!这很有意义!谢谢!是的id始终是一个数字。这在这种情况下非常有效!很高兴我能提供帮助:)@Tian yw:-)快乐编码~