Извлечь буквы и только первые Di git - PullRequest
3 голосов
/ 05 мая 2020

Я работаю с фреймом данных, который содержит буквы, специальные символы и цифры. Моя цель - извлечь все буквы и первую ди git. Все цифры всегда идут в конце после букв и специальных символов; однако некоторые буквы могут появляться после специальных символов. См. Пример ниже:

d = {'col1': ['A./B. 1234', 'CDEF/G5.','AB./C23']}
df = pd.DataFrame(data=d)
print(df)
#    col1
# 0  A./B. 1234
# 1  CDEF/G5.
# 2  AB./C23

Я просмотрел много вариантов, но не знаю, как обрабатывать специальные символы ./ и подобные.

df.col1.str.extract('([A-Za-z\d]+)')
#    0
# 0  A
# 1  CDEF
# 2  AB

Это дает мне все буквы и цифры, пока не дойдет до специального символа. В конце концов я хотел бы получить следующий результат:

AB1
CDEFG5
ABC2

Я новичок в регулярных выражениях.

Ответы [ 3 ]

2 голосов
/ 05 мая 2020

Вам нужно извлечь все символы до первого di git включительно, а затем заменить любые небуквенные / di git символы пустой строкой:

d = {'col1': ['A./B. 1234', 'CDEF/G5.','AB./C23']}
df = pd.DataFrame(data=d)
df.col1.str.extract(r'^([^\d]+\d)').replace('[^A-Za-z0-9]', '', regex=True)

Вывод:

        0
0     AB1
1  CDEFG5
2    ABC2
1 голос
/ 05 мая 2020

Другой способ

s=df['col1'].str.extractall("([a-zA-Z0-9])")[0]
s[s.str.isalpha()|s.shift().str.isalpha()].sum(level=0)
0       AB1
1    CDEFG5
2      ABC2
Name: 0, dtype: object
0 голосов
/ 05 мая 2020
import re

#create compiled regex... just makes it easier
pat1 = re.compile(r'[a-z]+', flags=re.IGNORECASE)
pat2 = re.compile(r'\d{1}')
#extract words and numbers
step1 = [''.join(pat1.findall(entry)) for entry in df.col1]
step2 = [pat2.search(entry).group() for entry in df.col1]

#combine words and numbers, withe the number trailing word(s)
[''.join(ent) for ent in zip(step1,step2)]

['AB1', 'CDEFG5', 'ABC2']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...