我写了一个从字符串中提取整数的函数。下面是字符串示例,它是我数据框中的一列。 我得到的输出在方括号中,里面有很多数字。我想使用这些数字进行进一步的计算,但是当我检查它是什么时,它不是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)
谢谢!
答案 0 :(得分:0)
您要使用str.findall
或str.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
。