如何使用正则表达式重新标记pandas Dataframe中的行?

时间:2016-02-03 16:41:37

标签: python regex r pandas

我打算访问某个列下的所有条目,并搜索字符串模式。

pandas DataFrame中的数据条目示例如下:

https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#safe=off&q=kitty+pictures
https://search.yahoo.com/search;_ylc=X3oDMTFiN25laTRvBF9TAzIwMjM1MzgwNzUEaXRjAzEEc2VjA3NyY2hfcWEEc2xrA3NyY2h3ZWI-?p=kitty+pictures&fr=yfp-t-694
https://duckduckgo.com/?q=kitty+pictures
https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#safe=off&q=cat+pictures

我想使用正则表达式来查找网络搜索引擎,并用一个单词替换它。因此,您使用正则表达式查找google并将上述所有网址替换为google

通常,人们会尝试

import re
string_example = "https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#safe=off&q=cat+pictures"
re.search(r'google', string_example)

然而,这只会返回谷歌,并不会取代它。

(1)如何在此数据框架中搜索r'google的整个列条目,然后将该网址替换为" Google"?

(2)如何仅搜索列条目?我每次都不能传入一个字符串。

1 个答案:

答案 0 :(得分:0)

使用str.contains处理各种方法来生成布尔掩码以传递loc并设置这些行:

In [126]:
df = pd.DataFrame({'url':['google', 'cat', 'google cat', 'dog']})
df

Out[126]:
          url
0      google
1         cat
2  google cat
3         dog

In [127]:    
df['url'].str.contains('google')

Out[127]:
0     True
1    False
2     True
3    False
Name: url, dtype: bool

In [128]:    
df['url'].str.contains('google|cat')

Out[128]:
0     True
1     True
2     True
3    False
Name: url, dtype: bool

In [129]:
(df['url'].str.contains('google')) & (~df['url'].str.contains('cat'))

Out[129]:
0     True
1    False
2    False
3    False
Name: url, dtype: bool

然后您可以将这些条件传递给loc:

In [130]:
df.loc[df['url'].str.contains('google'), 'url'] = 'yahoo'
df

Out[130]:
     url
0  yahoo
1    cat
2  yahoo
3    dog