Функция Pandas Series.str.contains()

Pandas 常用函数Часто используемые функции Pandas


Series.str.contains()это функция в Pandas, используемая для проверки того, содержит ли строка указанную подстроку.

При обработке данных нам часто требуется фильтровать данные на основе текстового содержимого, например находить записи, содержащие определённые ключевые слова, или отфильтровывать текст, соответствующий определённому шаблону.contains()Функция может проверять, содержит ли каждый строковый элемент указанную подстроку или шаблон регулярного выражения.

Значение слова:containsозначает «содержать», указывая, содержит ли строка указанное содержимое.


Базовый синтаксис и параметры

str.contains()является методом строкового аксессора Series, поэтому сначала нужно иметь Series, содержащий строки, а затем использовать.strаксессор, чтобы вызвать его.

Формат синтаксиса

Series.str.contains(pat, case=True, regex=True, na=None)

Описание параметра

Параметр Type Обязательный Описание Значение по умолчанию
pat str Обязательный Шаблон для поиска, который может быть обычной строкой или регулярным выражением. -
case bool Optional Учитывать ли регистр. По умолчанию True (с учётом регистра). True
regex bool Optional Указывает, следует ли рассматривать параметр pat как регулярное выражение. По умолчанию — True. True
na объект Optional Значение, возвращаемое, когда элемент равен NaN. По умолчанию None (возвращает NaN). Отсутствует

Описание функций

  • Возвращаемое значение: возвращает логический Series, указывающий, содержит ли каждый элемент заданный шаблон.
  • Действие: проверяет каждый строковый элемент в Series и возвращает True или False.
  • Примечание: по умолчанию использует сопоставление с регулярными выражениями, что позволяет сопоставлять более сложные шаблоны.

Примеры

Давайте подробно разберём на серии примеров от простого к сложному,str.contains()его использование.

Пример 1: базовое использование — проверка наличия подстроки

Пример

import pandas as pd

# Создать Series, содержащий текст
s = pd.Series(['apple', 'banana', 'grape', 'pineapple', 'orange'])

# Проверить, содержит ли он 'ap'
result = s.str.contains('ap')

print("Исходный ряд:")
print(s)
print("nContains 'ap':")
print(result)

Результат вывода:

原始 Series:
0       apple
1      banana
2       grape
3    pineapple
4      orange
dtype: object

是否包含 'ap':
0       True
1      False
2       True
3       True
4      False

Пояснение к коду:

  1. s.str.contains('ap')Проверьте, содержит ли каждая строка подстроку 'ap'.
  2. 'apple' содержит 'ap', возвращает True.
  3. 'banana' не содержит 'ap', возвращает False.
  4. 'grape' содержит 'ap', возвращает True.
  5. 'pineapple' содержит 'ap', возвращает True.

Пример 2: Использование сопоставления с регулярными выражениями

contains()По умолчанию используются регулярные выражения, которые могут сопоставляться с более сложными шаблонами.

Пример

import pandas as pd

# Создать Series, содержащий текст
s = pd.Series(['hello123', 'world456', 'example789', 'python', 'test123'])

# Используйте регулярное выражение для сопоставления строк, которые начинаются с буквы и за которыми следуют цифры
result = s.str.contains(r'^[a-zA-Z]+d+$')

print("Исходный ряд:")
print(s)
print("nСопоставьте шаблон, начинающийся с буквы и заканчивающийся цифрой:")
print(result)

Результат вывода:

原始 Series:
0      hello123
1      world456
2     example789
3       python
4      test123
dtype: object

匹配字母开头+数字结尾的模式:
0       True
1       True
2       True
3      False
4       True

Пояснение к коду:

  • r'^[a-zA-Z]+d+$'Это регулярное выражение, которое соответствует строкам, начинающимся с буквы и заканчивающимся цифрой.
  • ^обозначает начало строки,$обозначает конец строки.
  • 'python' не содержит цифр, поэтому не соответствует.

Пример 3: Сопоставление без учета регистра

Установивcase=Falseсопоставление без учета регистра может быть достигнуто.

Пример

import pandas as pd

# Создайте Series, содержащий текст в разных регистрах
s = pd.Series(['Apple', 'APPLE', 'apple', 'Banana', 'APPLE'])

# Сопоставление с учетом регистра
result_case = s.str.contains('APPLE')
# Сопоставление без учета регистра
result_nocase = s.str.contains('APPLE', case=False)

print("Исходный ряд:")
print(s)
print("nСовпадение с учётом регистра 'APPLE':")
print(result_case)
print("nСовпадение без учёта регистра 'APPLE':")
print(result_nocase)

Результат вывода:

原始 Series:
0      Apple
1     APPLE
2     apple
3     Banana
4     APPLE
dtype: object

区分大小写匹配 'APPLE':
0      False
1       True
2      False
3      False
4       True

不区分大小写匹配 'APPLE':
0       True
1       True
2       True
3      False
4       True

Пояснение к коду:

  • case=True(по умолчанию) С учётом регистра, совпадает только с точным 'APPLE'.
  • case=FalseБез учёта регистра, 'Apple', 'APPLE' и 'apple' все совпадают.

Пример 4: Обработка пропущенных значений

Черезnaдля параметра можно указать, как обрабатывать значения NaN.

Пример

import pandas as pd
import numpy as np

# Создать Series, содержащий значения NaN
s = pd.Series(['apple', 'banana', np.nan, 'grape', None])

# Обработка NaN по умолчанию (возвращает NaN)
result_default = s.str.contains('ap')
# Указать, что NaN возвращает False
result_na_false = s.str.contains('ap', na=False)

print("Исходный ряд:")
print(s)
print("nОбработка по умолчанию (возвращает NaN):")
print(result_default)
print("nОбрабатывать NaN как False:")
print(result_na_false)

Результат вывода:

原始 Series:
0       apple
1      banana
2        NaN
3       grape
4       None
dtype: object

默认处理(返回 NaN):
0       True
1      False
2        NaN
3       True
4        NaN

将 NaN 视为 False:
0       True
1      False
2      False
3       True
4      False

Пояснение к коду:

  • По умолчанию NaN и None возвращают NaN.
  • Настройкаna=Falseможно рассматривать NaN как несовпадение.
  • В реальной обработке данных это полезно и позволяет избежать проблем с фильтрацией, вызванных NaN.

Пример 5: Фильтрация данных

contains()Это часто сочетается с булевой индексацией для фильтрации данных.

Пример

import pandas as pd

# Создать имитированный Series с данными о товарах
products = pd.Series([
    'iPhone 14 Pro',
    'Samsung Galaxy S23',
    'iPhone 13',
    'Google Pixel 7',
    'iPad Pro',
    'MacBook Air',
    'Dell XPS 15'
])

# Отфильтровать товары, содержащие 'iPhone'
iphone_products = products[products.str.contains('iPhone')]

# Отфильтровать товары, не содержащие 'i' (с учётом регистра)
no_i_products = products[~products.str.contains('i')]

print("Все продукты:")
print(products)
print("nПродукты, содержащие 'iPhone':")
print(iphone_products)
print("nПродукты, не содержащие заглавную 'I':")
print(no_i_products)

Результат вывода:

所有产品:
0       iPhone 14 Pro
1    Samsung Galaxy S23
2          iPhone 13
3    Google Pixel 7
4          iPad Pro
5      MacBook Air
6        Dell XPS 15
dtype: object

包含 'iPhone' 的产品:
0    iPhone 14 Pro
2          iPhone 13
dtype: object

不包含大写 'I' 的产品:
6    Dell XPS 15

Пояснение к коду:

  • products[products.str.contains('iPhone')]Отфильтровать продукты, содержащие 'iPhone'.
  • ~products.str.contains('i')Используйте~отрицание для фильтрации продуктов, не содержащих 'i'.
  • Это распространённая операция при фильтрации данных.

Примечания

  • str.contains()По умолчанию используются регулярные выражения (regex=True)。
  • Если нужно сопоставлять обычные строки (не как регулярные выражения), можно установитьregex=False。
  • По умолчанию учитывается регистр; используйтеcase=Falseчтобы сделать его нечувствительным к регистру.
  • По умолчанию значения NaN возвращают NaN; используйтеnaпараметр для указания возвращаемого значения.
  • Эта функция возвращает логический Series, который можно напрямую использовать для логической индексации для фильтрации данных.

Pandas 常用函数Часто используемые функции Pandas

Другие расширения