如何将正则表达式应用于pandas中的列以查找值,然后将函数应用于此?

时间:2018-02-14 03:18:30

标签: python pandas lambda

我正在尝试读取大型数据集并在值与正则表达式匹配时替换一些字符串。

我发现了这个字符串:

result = ds['pagePath'].str.extract( \ 
                        '^\/([^\?]*)\?[^\?]*Code=[^\?]*Reference').str.strip()

看起来它正在工作并提取匹配行的文本,但现在我需要格式化为此值:

 result = '/NewUrl' + result_matching_column + '/somethingelse'

最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

这可能有效,但效率低下:

import numpy as np

ds['extraction'] = ds['pagePath'].str.extract('^\/([^\?]*)\?[^\?]*Code=[^\?]*Reference').str.strip()
ds['pagePath'] = np.where(pd.notnull(ds['extraction']),
                          r'/NewUrl' + ds['extraction'] + r'/somethingelse',
                          ds['pagePath'])
ds = ds.drop('extraction', 1)

答案 1 :(得分:0)

我使用lambda和函数

 df['pagePath'].apply(lambda x: regex_lev(x))

这是功能:

def regex_lev(x):
    url = x
    url = url.replace('/?ReturnUrl', '/xReturnUrl')
    regex =r"^\/([^\?]*)\?[^\?]*communityCode=[^\?]*paymentReference"
    if re.search(regex, url):

        match =  re.search(regex, url)
        result= '/' + match.group(1) + '/payment-complete'
        result = result.replace('//','/')
        result = result.replace('/xReturnUrl', '/?ReturnUrl')
        print("Full match: %s" % (result))

        return result

    else:
        print("NO match: %s" % (x))
        return  x