一、str.contains是什么
str.contains是Python中一个字符串处理的方法,它可以在一个字符串中查找一个子字符串,如果该子字符串存在于原字符串中,则返回True,否则返回False。
使用方法:
Syntax: Series.str.contains(pat, case=True, flags=0, na=nan, regex=True)
参数:
pat: 要查找的字符串
case: 是否区分大小写,默认为True(即区分大小写)
flags: 正则表达式的标记
na: 缺失值(NaN)的表示形式
regex: 是否使用正则表达式,默认为True(即使用正则表达式)
二、str.contains的用途
str.contains可以在文本处理中非常有用。下面简单介绍其主要用途。
1. 查找字符串
str.contains可以用来查找特定字符串是否存在于另一个字符串中。例如:
import pandas as pd # 创建一个Series s = pd.Series(['apple', 'pear', 'orange', 'banana']) # 查找是否包含apple s.str.contains('apple')
输出结果:
0 True
1 False
2 False
3 False
dtype: bool
可以看到,该Series中的第一个元素包含了字符串“apple”,因此输出结果为True。
2. 替换字符串
str.contains还可以用来替换字符串。例如,我们可以使用它来将一个字符串中的所有“-”替换为“_”:
import pandas as pd # 创建一个Series s = pd.Series(['apple-2019', 'pear-2020', 'orange-2021', 'banana-2022']) # 将所有'-'替换为'_' s.str.replace('-', '_')
输出结果:
0 apple_2019
1 pear_2020
2 orange_2021
3 banana_2022
dtype: object
3. 构造新的Series
str.contains还可以用于构造新的Series。例如,我们可以使用它来构造一个表示每个字符串中是否包含“at”的Series:
import pandas as pd # 创建一个Series s = pd.Series(['cat', 'dog', 'rat', 'bat']) # 构造一个新的Series,表示每个字符串是否包含'at' has_at = s.str.contains('at') print(has_at)
输出结果:
0 True
1 False
2 True
3 True
dtype: bool
三、str.contains的应用案例
1. 分析电子邮件列表
假设我们有一个电子邮件列表,其中包含每封电子邮件的主题、发件人和收件人。我们想要找出所有与“Python”相关的邮件。我们可以使用str.contains方法来查找包含字符串“Python”的主题或正文的电子邮件。具体方法如下:
import pandas as pd # 创建一个DataFrame df = pd.DataFrame({ 'subject': ['Python request', 'Java request', 'Python error', 'Python success'], 'sender': ['Tom', 'Alex', 'Tom', 'Tom'], 'recipient': ['John', 'Tom', 'John', 'John'] }) # 提取主题、发件人和收件人包含'Python'的邮件 python_emails = df[df['subject'].str.contains('Python') | df['sender'].str.contains('Python') | df['recipient'].str.contains('Python')] print(python_emails)
输出结果:
subject sender recipient
0 Python request Tom John
2 Python error Tom John
3 Python success Tom John
通过str.contains,我们成功找到了所有与“Python”相关的邮件。
2. 解析网页内容
假设我们要从一个网页中抽取所有的URL链接。我们可以先使用Python中的requests模块从网页中获取HTML代码,然后使用str.contains方法筛选出所有的URL链接。具体方法如下:
import requests import pandas as pd import re # 获取网页HTML代码 url = 'https://www.baidu.com' response = requests.get(url) html = response.text # 使用正则表达式匹配所有的URL链接 pattern = r'https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+' urls = pd.Series(re.findall(pattern, html)) # 筛选出所有以'http'或'https'开头的URL链接 http_urls = urls[urls.str.contains('^https?')] print(http_urls)
输出结果:
0 https://www.baidu.com/more/
1 https://www.baidu.com/cache/sethelp/help.html
2 https://www.baidu.com/more/suggestion.html
3 https://voice.baidu.com/act/newpneumonia
4 https://www.baidu.com/duty/
5 https://github.com/WhiteTrefoil/python_note
dtype: object
通过str.contains,我们成功找到了所有以'http'或'https'开头的URL链接。
总结
通过本文,我们了解了str.contains的用法和作用。str.contains是Python中一个方便实用的字符串处理工具,可以在文本处理中帮助我们快速地查找、替换和提取字符串。