У меня есть фрейм данных, который выглядит так:
description
1906 RES 330 ML
1906 RES 330ML
RES 335 c/6
RES 332 c/12
Я хочу извлечь три последовательные цифры чисел и сохранить его в новом столбце «объем». Мой код такой:
df['volume'] = df['description'].str.extract('([([\d]*[\d]){3,3}?])')
Ожидаемые результаты должны быть такими:
volume
330
330
335
332
Тем не менее, это дает такие результаты:
volume
1906
1906
335
332
Может кто-нибудь помочь мне исправить этот код? Спасибо!!!
1
Elsa Li
28 Авг 2017 в 21:19
3 ответа
Лучший ответ
Может быть, это излишне, но если вы хотите убедиться, что вы не захватываете номера, которые являются частью четырехзначных чисел, вы можете использовать это:
df['volume'] = df.description.str.extract(r'(?<!\d)(\d{3})(?!\d)', expand=False)
print(df)
description volume
0 1906 RES 330 ML 330
1 1906 RES 330ML 330
2 RES 335 c/6 335
3 RES 332 c/12 332
Укажите expand=False
, чтобы совпадения возвращались только как один pd.Series
.
Регулярное выражение:
(?<!\d)
- указывает, что что-либо перед набором из 3 цифр является чем-то, что не является цифрой (\d{3})
- соответствует 3 цифрам (?!\d)
- указывает, что что-либо после набора из 3 цифр является чем-то, что не является цифрой
5
cs95
28 Авг 2017 в 19:11