从不在任何其他数字之前或之后的pandas字符串列中提取最多N位数

问题描述 投票:0回答:1

python python-3.x pandas我对这个混合的String数据感到头疼。我在数据中有一个带有混合字母数字,文本,数字字符和长整数的数据。

你能指导我解决我的问题吗?

这里的逻辑是,在这个混合字符串中,需要应用以下逻辑,

如果它的字母数字字符如1-HRCC,455-HRCC,它应该只从中选择数值(它应该只限于<= 999)。如果只有数字存在,它应该复制相同的数字,但仅当数字<= 999时。例如45,90,888,999给出相同数字的输出,但如果数字> 999,则应将这些值输出为1.如果存在任何空白,则应保持与空白相同。如果任何文本字符如abc,def,ghi,柱式磨等应输出为1.任何数字123 678984或带空格的字母数字(ahd 233 xyz)也应输出为1.我已定义以下函数,因为我仍在学习阶段不确定如何实现这一目标。

import pandas as pd

df= pd.DataFrame({'Callback':['1-HRCC','Pilar Mill',' ','abc',' ','[email protected]','xyz','mc','2-   HRCC','Regional','15','10','2','99-HRCC','43- HRCC','675','888','4-   HRCC','31318697418','30-HRCC','25-HRCC','30-HRCC']})

def reg_clean(s):
    if isinstance(s,str) and s[:0].isdigit():
        return int(''.join(ele for ele in s if ele.isdigit()))
    elif isinstance(s,str) and s=="":
            return ""
#    elif  s[:1].isdigit():?
#            return s
    else:
        return 1
df['Callback1']= df['Callback'].map(reg_clean)

Mixed_String(输入),输出

1-HRCC,1
Pilar Mill,1
abc,1
[email protected],1
xyz,1
mc,1
2-HRCC,2
Regional,1
,
15,15
10,10
2,2
99-HRCC,99
,
43-HRCC,43
675,675
888,888
4-HRCC,4
31318697418,1
30-HRCC,30
25-HRCC,25
30-HRCC,30

这里输出使用逗号(,)分隔。目前一切都是1。

python regex string pandas dataframe
1个回答
0
投票

您可以使用像(?<!\d)(\d{1,3})(?!\d)这样的正则表达式匹配任何未包含数字的3位数字块。首先,检查字符串是否为空,如果是,则结果应为空字符串。否则,如果没有匹配,请抓住正则表达式匹配值或1

import re
import pandas as pd

regex = re.compile(r'(?<!\d)(\d{1,3})(?!\d)')
def reg_clean(s):
    if not s.strip(): # if strins is not blank
        return ""     # Return empty
    else:
        m = regex.search(s)       # If there is a regex match
        if m:
            return int(m.group()) # return the match value
        else:
            return 1              # Else, return 1

df=pd.DataFrame({'Callback':['1-HRCC','Pilar Mill',' ','abc',' ','[email protected]','xyz','mc','2-   HRCC','Regional','15','10','2','99-HRCC','43- HRCC','675','888','4-   HRCC','31318697418','30-HRCC','25-HRCC','30-HRCC']})
df['ext'] = df['Callback'].apply(reg_clean)

输出:

>>> df
                Callback  ext
0                 1-HRCC    1
1             Pilar Mill    1
2                            
3                    abc    1
4                            
5   [email protected]    1
6                    xyz    1
7                     mc    1
8              2-   HRCC    2
9               Regional    1
10                    15   15
11                    10   10
12                     2    2
13               99-HRCC   99
14              43- HRCC   43
15                   675  675
16                   888  888
17             4-   HRCC    4
18           31318697418    1
19               30-HRCC   30
20               25-HRCC   25
21               30-HRCC   30
© www.soinside.com 2019 - 2024. All rights reserved.