我在创建模式识别功能以从数据框列中提取所有数字并进行打印时遇到问题。
在查看了数据营地教程和其他有关堆栈溢出的问题之后,我试图创建一个正则表达式模式,但是我无法创建一种模式来提取所有数字并打印它们。本质上,我创建的EA模式和带有浮动的HR模式(例如1.12)不会返回结果。
import re
import pandas as pd
data = ['1EA @ 3217.45;', 'ST - .63HR@165;', 'ST - .5HR@123;', 'ST - 1.08HR@165;', '1EA @ 3217.45;', 'ST - .85HR@165;', 'ST - .85HR@165;', '1EA @ 3217.45;', 'ST - .12HR@165;', 'OT - 1.12HR @ 165;', 'ST - .55HR@123;OT - 0.82HR @ 123;', 'ST - .5HR@165;', 'OT - 0.45HR @ 123;', 'ST - .6HR@123;', 'ST - 1.42HR@123;', '1EA @ 1500;', 'ST - .3HR@123;', 'ST - 1HR@111;OT - 0.25HR @ 111;']
Travel = pd.DataFrame(data, columns=['Rate Breakup Description'])
for a in Travel['Rate Breakup Description']:
print(re.search('.(\d+)HR | (\d+)EA | (\d+)HR | (\d+)EA', a, re.I|re.M))
我的目标是能够拥有一种模式识别功能,该功能将提取所有数字,而与字符串模式不同无关,并按出现的顺序打印它们。
答案 0 :(得分:0)
您可以使用
Travel['Result'] = Travel['Rate Breakup Description'].str.findall(r'\d*\.?\d+(?=HR|EA)').apply(', '.join)
模式将匹配
\d*
-0位数以上\.?
-可选的.
\d+
-1个以上数字(?=HR|EA)
-后跟HR
或EA
。 .str.findall
将返回它在输入字符串中找到的所有匹配项,而.apply(', '.join)
将把结果与逗号和空格连接起来。
如果每个输入中预期有一个匹配项,则可以使用其他解决方案:
Travel['Result'] = Travel['Rate Breakup Description'].str.extract(r'(\d*\.?\d+)(?:HR|EA)', expand=False)
在这里,(\d*\.?\d+)
由于括号而为捕获组,此部分由.str.extract
返回,而(?:HR|EA)
是非捕获组(因此不返回)匹配HR
或EA
。