Метод extractall
Метод extractall применяется к Series
через аксессор str и извлекает все совпадения
с регулярным выражением из каждой строки. В отличие
от метода extract, который возвращает только
первое совпадение, extractall находит все
вхождения. Метод возвращает DataFrame
с мультииндексом, где первый уровень - исходный
индекс, а второй - номер совпадения.
Параметр ⁅i⁆pat⁅/i⁆ принимает строку регулярного
выражения. Параметр ⁅i⁆flags⁅/i⁆ позволяет задать
флаги для изменения поведения регулярного выражения.
Синтаксис
ser.str.extractall(pat, flags=0)
Пример
Давайте извлечём все цифры из каждой строки:
import pandas as pd
ser = pd.Series(['a1b2c3', 'd4e5f6', 'g7h8i9'])
res = ser.str.extractall(r'(\d)')
print(res)
Результат выполнения кода:
0
match
0 0 1
1 2
2 3
1 0 4
1 5
2 6
2 0 7
1 8
2 9
Пример
Извлечём все группы с помощью нескольких групп захвата:
import pandas as pd
ser = pd.Series(['a1b2c3', 'd4e5f6'])
res = ser.str.extractall(r'(\w)(\d)')
print(res)
Результат выполнения кода:
0 1
match
0 0 a 1
1 b 2
2 c 3
1 0 d 4
1 e 5
2 f 6
Пример
Найдём все слова, начинающиеся с буквы a,
используя флаг ⁅i⁆re.IGNORECASE⁅/i⁆:
import pandas as pd
import re
ser = pd.Series(['apple Apple', 'banana apricot'])
res = ser.str.extractall(r'(a\w+)', flags=re.IGNORECASE)
print(res)
Результат выполнения кода:
0
match
0 0 apple
1 Apple
1 0 apricot
Пример
Если совпадений нет, то метод возвращает пустой
DataFrame:
import pandas as pd
ser = pd.Series(['abc', 'def', 'ghi'])
res = ser.str.extractall(r'(\d)')
print(res)
Результат выполнения кода:
Empty DataFrame
Columns: [0]
Index: []