您的位置:

使用str.contains检查字符串是否包含指定内容

一、str.contains()方法说明

str.contains()方法是Python pandas库中的一种常用方法,主要用于检查字符串中是否包含某个指定的内容,返回值是布尔类型。

该方法的语法格式如下所示:

Series.str.contains(pat, case=True, flags=0, na=nan, regex=True)

其中参数说明如下:

  • pat:为要匹配的字符串。
  • case:True or False,默认为True,表示区分大小写。
  • flags:更改匹配方式,例如:忽略大小写、多行匹配等。
  • na:指定替换缺失值的值。
  • regex:正则表达式模式。

二、实例演示

我们可以通过以下示例演示,如何使用str.contains()方法进行字符串匹配。

示例代码如下所示:

import pandas as pd

data = {'names': ['Amy', 'Bob', 'Cathy', 'Don', 'Eve'],
        'location': ['California', 'New York', 'Utah', 'Texas', 'Florida']}
df = pd.DataFrame(data)

# 检查名字列是否包含指定内容 'o'
df['name_contains_o'] = df['names'].str.contains('o')

print(df)

输出结果如下所示:

    names    location name_contains_o
0     Amy  California           True
1     Bob    New York           False
2   Cathy        Utah           True
3     Don       Texas          False
4     Eve     Florida          False

上面的示例中,我们首先创建了一个包含名字和地址的DataFrame,然后使用str.contains()方法检查名字列是否包含字母'o',并添加了一个结果列。结果表明,对于所有包含字母'o'的名字,结果列中都显示为True,反之则为False。

三、使用正则表达式进行匹配

在使用str.contains()方法时,如果将regex参数设置为True,则可以使用正则表达式进行字符串匹配。

例如,我们想找到名字中以'b'或'c'开头的人,可以使用以下正则表达式进行匹配:

import pandas as pd

data = {'names': ['Amy', 'Bob', 'Cathy', 'Don', 'Eve'],
        'location': ['California', 'New York', 'Utah', 'Texas', 'Florida']}
df = pd.DataFrame(data)

# 使用正则表达式进行匹配
df['name_starts_with_b_or_c'] = df['names'].str.contains('^[bc]')

print(df)

输出结果如下:

    names    location name_starts_with_b_or_c
0     Amy  California                    False
1     Bob    New York                     True
2   Cathy        Utah                     True
3     Don       Texas                    False
4     Eve     Florida                    False

上面的示例中,我们以'^[bc]'正则表达式为条件,检查包含字母'b'或'c'开头的名字,并添加结果列。结果表明,只有Bob和Cathy的名字以'b'或'c'开头,因此结果列中的值为True。

四、case参数的使用

在使用str.contains()方法时,case参数默认为True,表示是否区分大小写。如果我们想不区分大小写,则可以将case参数设置为False。

例如,我们想要找到含有字母'a'的名字,而不关心其大小写,可以使用以下示例代码:

import pandas as pd

data = {'names': ['Amy', 'Bob', 'Cathy', 'Don', 'Eve'],
        'location': ['California', 'New York', 'Utah', 'Texas', 'Florida']}
df = pd.DataFrame(data)

# case参数为False,不区分大小写
df['contains_a_case_insensitive'] = df['names'].str.contains('a', case=False)

print(df)

输出结果如下所示:

    names    location contains_a_case_insensitive
0     Amy  California                        True
1     Bob    New York                       False
2   Cathy        Utah                        True
3     Don       Texas                       False
4     Eve     Florida                       False

上面的示例中,我们以字母'a'为条件进行匹配,并将case参数设置为False,表示不区分大小写。结果表明,所有包含字母'a'的名字都被识别出来了。

五、flags参数的使用

在使用str.contains()方法时,如果想更改匹配方式,比如忽略大小写、多行匹配等,可以使用flags参数进行更改。下面是一个使用flags参数的示例代码:

import pandas as pd

data = {'text': ['The quick brown fox jumps over the lazy dog.',
                 'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.',
                 'The quack brown fox jumps over the lazy dog.']}
df = pd.DataFrame(data)

# 将'multiline'标志传递给flags参数
df['contains_dog'] = df['text'].str.contains('dog', flags=re.MULTILINE)

print(df)

输出结果如下所示:

                                                     text  contains_dog
0     The quick brown fox jumps over the lazy dog.           True
1     THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.          True
2     The quack brown fox jumps over the lazy dog.          True

上面的示例中,我们将字符串中的dog匹配标志设置为multiline,则即使在多行文本中也会识别出dog。

六、na参数的使用

在使用str.contains()方法时,如果字符串中存在缺失值,我们可以使用na参数指定替换缺失值的值。

下面是一个使用na参数的示例代码:

import pandas as pd
import numpy as np

data = {'text': ['The quick brown fox jumps over the lazy dog.',
                 np.nan,
                 'The quack brown fox jumps over the lazy dog.']}
df = pd.DataFrame(data)

# 将na参数设置为False
df['contains_dog'] = df['text'].str.contains('dog', na=False)

print(df)

输出结果如下所示:

                                                        text contains_dog
0     The quick brown fox jumps over the lazy dog.          True
1     NaN                                                     False
2     The quack brown fox jumps over the lazy dog.          True

上面的示例中,我们将na参数设置为False,表示将缺失值看作不包含任何内容,并对其进行了替换。

七、总结

本文主要介绍了Python pandas库中的str.contains()方法,该方法用于检查字符串中是否包含某个指定的内容,支持正则表达式匹配,可以使用case、flags和na等参数更改匹配方式和替换缺失值。该方法在数据清洗和处理文本数据等场景中非常实用。