使用regex提取整数的函数返回nonetyp

2024-10-01 04:50:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个从字符串中提取整数的函数。下面是strings示例,它是我的dataframe中的一列。 我得到的输出是方括号,里面有很多数字。我想用这些数字来进一步计算,但当我检查它是什么而不是整数时,它是一个非类型。为什么?我怎样才能把它转换成整数,这样我就可以用我得到的输出数找到.sum()或.mean()?理想情况下,我希望提取的整数作为另一列,如结构提取物(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)

谢谢你!你知道吗


Tags: 数据函数no字符串text数字整数cash
3条回答

函数返回None,因为您忘记了return语句。因为Python中的每个函数都有一个返回值,所以缺少的return语句类似于返回None。你知道吗

您想使用^{}^{}

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列表。

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

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


但是,如果您的问题是regex,那么您应该考虑改进您的过滤机制(应该包含哪些内容)。你也可以考虑一个字一个字地手动过滤(虽然不是很理想)(确定哪个字是不相关的)。你知道吗

相关问题 更多 >