Из следующего фрейма данных:
d = {'col1':['a-1524112-124', 'b-1515', 'c-584854', 'a-15154']}
df = pd.DataFrame.from_dict(d)
Моя конечная цель - извлечь буквы a, b или c (в виде строки) из серии панд. Для этого я использую метод .findall()
из модуля re
, как показано ниже:
# import the module
import re
# define the patterns
pat = 'a|b|c'
# extract the patterns from the elements in the specified column
df['col1'].str.findall(pat)
Проблема в том, что выходные данные, то есть буквы a, b или c в каждой строке, будут присутствовать в списке (одного элемента), как показано ниже:
Out[301]:
0 [a]
1 [b]
2 [c]
3 [a]
Хотя я хотел бы, чтобы буквы a, b или c были в виде строки, как показано ниже:
0 a
1 b
2 c
3 a
Я знаю, что если я объединю re.search()
с .group()
, я могу получить строку, но если я сделаю:
df['col1'].str.search(pat).group()
Я получу следующее сообщение об ошибке:
AttributeError: 'StringMethods' object has no attribute 'search'
Использование .str.split()
не сработает, потому что в моем исходном кадре данных я хочу захватывать строки, которые могут содержать разделитель (например, я могу захотеть захватить a-b
)
Кто-нибудь знает простое решение для этого, возможно, избегая итеративных операций, таких как цикл for или понимание списка?