使用正则表达式提取整数的函数返回 nonetype



我写了一个函数来从字符串中提取整数。字符串示例如下,它是我的数据框中的一列。 我得到的输出在方括号中,里面有很多数字。我想使用这些数字来进一步计算,但是当我检查它是什么时,它不是整数,而是 Nonetype。为什么?以及如何将其转换为整数,以便我可以找到带有输出数字的 .sum(( 或 .mean((?理想情况下,我希望提取的整数作为另一列,就像 str.extract(regex, inplace=True( 一样。

这是我数据的一部分,这是我的数据帧 df2017 中的一列

Bo medium lapis 20 cash pr gr
Porte monnaie dogon vert olive 430 euros carte
Bo noires 2015 fleurs clips moins brillant 30 ...
Necklace No 20 2016 80€ carte Grecs 20h00 salo...
Bo mini rouges 30 carte 13h it
Necklace No 17 2016 100€ cash pr US/NYC crois ...
Chocker No 1 2016 + BO No 32 2016 70€ cash pr …

这是我的代码

def extract_int_price():
text=df2017['Items'].astype(str)
text=text.to_string()
amount=[int(x) for x in re.findall('(?<!Nos)(?<!new)(?!2016)(d{2,4})+€?', text)]
print (amount)

谢谢!

您的函数返回None,因为您忘记了return语句。因为 Python 中的每个函数都有一个返回值,所以缺少return语句就像返回None

你想使用str.findallstr.extractall

In [11]: REGEX = '(?<!Nos)(?<!new)(?!2016)(d{2,4})+€?'
In [12]: s = df2017['Items']
In [13]: s.str.findall(REGEX)
Out[13]:
0                 [20]
1                [430]
2           [2015, 30]
3    [016, 80, 20, 00]
4             [30, 13]
5           [016, 100]
6       [016, 016, 70]
dtype: object
In [14]: s.str.extractall(REGEX)
Out[14]:
0
match
0 0        20
1 0       430
2 0      2015
1        30
3 0       016
1        80
2        20
3        00
4 0        30
1        13
5 0       016
1       100
6 0       016
1       016
2        70

通常extractall是首选,因为它可以让您保持在numpy中,而不是使用一系列python列表。

如果你的问题是获取整数的总和,那么你可以简单地:

sum(int(x) for x in ...)


但是,如果你的问题出在正则表达式上,那么你应该考虑改进你的过滤机制(应该输入什么(。您也可以考虑逐字手动(尽管不理想(过滤(确定哪个词不相关(。

最新更新