【发布时间】:2019-01-28 15:53:02
【问题描述】:
我在创建模式识别函数以从数据框列中提取所有数字并打印它们时遇到问题。
在查看数据营教程和有关堆栈溢出的其他问题后,我尝试创建一个正则表达式模式,但我无法创建一个能够提取所有数字并打印它们的模式。本质上,我创建的 EA 模式和像 1.12 这样的带有浮点数的 HR 模式不会返回结果。
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))
我的目标是能够拥有一个模式识别功能,该功能将提取所有数字,而不管不同的字符串模式如何,并按照它们出现的顺序打印它们。
【问题讨论】:
-
d匹配d和\d匹配一个数字。 -
@Wiktor Stribiżew 好的,我在我的代码中解决了这个问题。但是,当我在 Python 中尝试它时,它仍然没有返回指定模式的任何结果。
-
试试
Travel['Rate Breakup Description'].str.findall(r'\d*\.?\d+(?=HR|EA)').apply(', '.join) -
@Wiktor Stribizew 当我将它应用到 for 循环并尝试将它们一起打印时出现此错误 AttributeError: 'Series' object has no attribute 'join'
-
试试
.apply(', '.join)。以防万一您在输入字符串中有超过 1 个匹配项。如果每个字符串只有 1 个匹配项,请使用Travel['Result'] = Travel['Rate Breakup Description'].str.extract(r'(\d*\.?\d+)(?:HR|EA)', expand=False)
标签: python regex for-loop search