python使用输入替换独立字符串

时间:2017-12-12 16:36:50

标签: python pandas replace

我在pandas数据框中有2个字段。我想用'var2'中的值删除'var1'中的字符串值,但前提是该值在'var1'中是独立的(不是在单词中)。例如,在var1 =“APPLE AP”中的字符串中,替换var2“AP”中的值,以使最终值为“APPLE”。当前代码导致返回值“PLE”:

 var1 = pd.Series(['APPLE AP','CO COMPANY CO','CO COMPANY CO','DR','CAT'])

    var2 = pd.Series(['AP','CO','COMPANY','DR',' '])

    var1_expected_output = pd.Series(['APPLE','COMPANY','CO CO',' ','CAT'])

    df = pd.DataFrame(dict(var1= var1,var2= var2 ,var1_expected_output=var1_expected_output))

   #correct this part:  df['var1_incorrect_output'] = df.apply(lambda x:  x['var1'].replace( x['var2'], ''), axis=1)

    df = df[['var1','var2','var1_expected_output','var1_incorrect_output']]

    print df

    var1            var2      var1_expected_output  var1_incorrect_output
0   APPLE AP        AP        APPLE                 PLE
1   CO COMPANY CO   CO        COMPANY               MPANY
2   CO COMPANY CO   COMPANY   CO CO                 CO  CO
3   DR  DR      
4   CAT                       CAT                   CAT

仅供参考:lambda代码片段是一个包含数亿行的大型项目的一部分。

1 个答案:

答案 0 :(得分:0)

选项1
apply + re.sub - 慢,但保证可以正常工作

import re

df = pd.DataFrame({'var1' : var1, 'var2' : var2})        
df.apply(lambda x: re.sub(r'\b{}\b'.format(x.var2), '', x.var1), 1)

0       APPLE 
1     COMPANY 
2       CO  CO
3             
4          CAT
dtype: object

选项2
set差异 - 应该更快,但不能保证有效(因为套装不会保留顺序或重复)

(var1.str.split().apply(set) - var2.str.split().apply(set)).str.join(' ')

0      APPLE
1    COMPANY
2         CO    # fails here
3           
4        CAT
dtype: object