Regular expression to find a sequence of numbers before multiple patterns, into a new column (Python, Pandas)
You can use str.extract
:
cars['HP'] = cars['Engine Information'].str.extract(r'(\d+)\s*hp\b', flags=re.I)
Details
(\d+)\s*hp\b
- matches and captures into Group 1 one or more digits, then just matches 0 or more whitespaces (\s*
) andhp
(in a case insensitive way due toflags=re.I
) as a whole word (since\b
marks a word boundary)str.extract
only returns the captured value if there is a capturing group in the pattern, so thehp
and whitespaces are not part of the result.
Python demo results:
>>> cars
Engine Information HP
0 Honda 2.4L 4 cylinder 190 hp 162 ft-lbs 190
1 Aston Martin 4.7L 8 cylinder 420 hp 346 ft-lbs 420
2 Dodge 5.7L 8 Cylinder 390hp 407 ft-lbs 390
3 MINI 1.6L 4 Cylinder 118 hp 114 ft-lbs 118
4 Ford 5.0L 8 Cylinder 360hp 380 ft-lbs FFV 360
5 GMC 6.0L 8 Cylinder 352 hp 382 ft-lbs 352