2017-06-16 60 views
2

我有一个Python 2.7熊猫数据帧像以下:Python熊猫:如何替换字符串包含“?”

Id  Title    URL 
Id-1 Bruce Almighty https://www.youtube.com/watch?v=5VGyTOGxyVA 
Id-2 Superhero Movie https://www.youtube.com/watch?v=3BnXz-7-y-o 
Id-3 Taken    https://www.youtube.com/watch?v=vjbfiOERDYs 
Id-4 Forest Gump  https://www.youtube.com/watch?v=eJFkCJySHdY&t=524s 

我想从列“URL”与其他字符串来替换字符串的一部分的“v =?”,例如“PPP”。我试过用普通的替换命令:

df['URL'] = df['URL'].str.replace('?v=', 'ppp') 

但是得到了下面的错误。

error: nothing to repeat. 

当我尝试通过更换只有一个字符,例如:

df['URL'] = df['URL'].str.replace('?', 'ppp') 

它工作正常。为什么当我尝试替换字符串“?v =”时它不起作用?

+1

你正在尝试替换'?= v'而不是'?v =' – HH1

+0

谢谢。编辑错误 – raja

回答

3

你需要逃避?通过\

df['URL'] = df['URL'].str.replace('\?v=', 'ppp') 
print (df) 
    Id   Title            URL 
0 Id-1 Bruce Almighty  https://www.youtube.com/watchppp5VGyTOGxyVA 
1 Id-2 Superhero Movie  https://www.youtube.com/watchppp3BnXz-7-y-o 
2 Id-3   Taken  https://www.youtube.com/watchpppvjbfiOERDYs 
3 Id-4  Forest Gump https://www.youtube.com/watchpppeJFkCJySHdY&t=... 

Series.replace另一种解决方案:

df['URL'] = df['URL'].replace('\?v=', 'ppp', regex=True) 
print (df) 
    Id   Title            URL 
0 Id-1 Bruce Almighty  https://www.youtube.com/watchppp5VGyTOGxyVA 
1 Id-2 Superhero Movie  https://www.youtube.com/watchppp3BnXz-7-y-o 
2 Id-3   Taken  https://www.youtube.com/watchpppvjbfiOERDYs 
3 Id-4  Forest Gump https://www.youtube.com/watchpppeJFkCJySHdY&t=... 
+0

谢谢。但是,当我试图只替换“?”时,它为什么会起作用?字符? – raja

+0

因为它是特殊的正则表达式字符。检查[this](https://stackoverflow.com/questions/12766953/python-regex-with-question-mark-literal)。 – jezrael

1

或者您可以指导你正在做一个标准的(不是正则表达式)熊猫取代:

df['URL'] = df['URL'].str.replace('?v=', 'ppp', regex=False)