关于数字的正则表达式-python

关于数字的正则表达式-python,python,regex,pandas,Python,Regex,Pandas,我是新来的regex,我需要一些帮助。我有一个数据框,其中有一列带有amount,在大多数情况下类似于869850.0,我只需要数字以950.00或999.00结尾的行,我不需要类似于999.1的行。我没有想到如何在pandas中归档这些值 所以我试着用正则表达式匹配,因为我是新手,所以我只知道如何得到数字单位。类似于[^.]*。但是我不知道如何应用if和如何继续,有人能帮我吗?如果你想使用regex,请尝试以下方法: [0-9]{3}\.0{2} 它将首先匹配3个数字,然后匹配点(.),然后

我是新来的regex,我需要一些帮助。我有一个数据框,其中有一列带有amount,在大多数情况下类似于869850.0,我只需要数字以950.00或999.00结尾的行,我不需要类似于999.1的行。我没有想到如何在pandas中归档这些值


所以我试着用正则表达式匹配,因为我是新手,所以我只知道如何得到数字单位。类似于[^.]*。但是我不知道如何应用if和如何继续,有人能帮我吗?

如果你想使用regex,请尝试以下方法:

[0-9]{3}\.0{2}
它将首先匹配3个数字,然后匹配点(.),然后匹配2个0。我希望这个正则表达式足够容易理解和调整

您可以在此处尝试正则表达式:

使用(
%
)代替正则表达式。它将给你除法后的余数,如果给10的幂,它可以用来得到一个数字的“尾”。这条尾巴可以根据你的情况检查

在您的情况下,除以1000的余数就是您要查找的余数,请参见下面的示例:

import pandas as pd

s = pd.Series([
    1950., 
    1012950., 
    2999., 
    1950.1, 
])

s % 1000

# Returns 
# 950.
# 950.
# 999.
# 950.1

(s % 1000).isin([999., 950.])  # allowed values

# Returns
# True
# True
# True
# False

s[(s % 1000).isin([999., 950.])]

# Returns
# 1950.
# 1012950.
# 2999.

# Not: 1950.1, because 950.1 is not in [999., 950.]

您也可以尝试以下方法:

     df = pd.DataFrame({'a': ['850890.0', '850999.0', '850990.0', '850995.0']})
     print(df)
               a
     0  850890.0
     1  850999.0
     2  850990.0
     3  850950.0

     #create a regex to find all numbers
     numbers = ['999.0', '950.0']

     #now put these values in a pattern
     pattern =  r'(?:{})'.format('|'.join(numbers))
     pattern
     '(?:999.0|950.0)'

     dfnew = df['a'].str.findall(pattern).apply(''.join,1)
     print(dfnew)
     0         
     1    999.0     
     2    
     3    950.0
     Name: a, dtype: object

你能给我们看一些代码吗?试试这个:^[0-9]+(\.0+)$我认为没有小数的数字也是可以接受的。