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

时间:2018-09-27 22:07:41

标签: python regex pandas extract

我写了一个从字符串中提取整数的函数。下面是字符串示例,它是我数据框中的一列。 我得到的输出在方括号中,里面有很多数字。我想使用这些数字进行进一步的计算,但是当我检查它是什么时,它不是None型而是整数。这是为什么?以及如何将其转换为整数,以便可以使用得到的输出编号找到.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('(?<!No\s)(?<!new)(?!2016)(\d{2,4})+€?', text)]
    print (amount)

谢谢!

3 个答案:

答案 0 :(得分:0)

您要使用str.findallstr.extractall

In [11]: REGEX = '(?<!No\s)(?<!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列表。

答案 1 :(得分:0)

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

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


但是,如果问题出在正则表达式上,则应考虑改进过滤器机制(应引入的内容)。您也可以考虑手动逐字过滤(尽管不理想)(确定哪个字不相关)。

答案 2 :(得分:0)

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