代码之家  ›  专栏  ›  技术社区  ›  martin

python中的replace函数给出了错误的结果

  •  1
  • martin  · 技术社区  · 6 年前

    干膜厚度:

        Sample  AlmostFinal  
        1          KOPLA234        
        1          KOPLA234
        2          RWPLB253
        3          MMPLA415
        3          MMPLA415 
    

    KOPL RWP MM 到Kolpol,最后一个字符a/b应保留。所以结果应该是:

        Sample  AlmostFinal  Final
        1          KOPLA234  KOLPOLA234      
        1          KOPLA234  KOLPOLA234
        2          RWPLB253  KOLPOLB253
        3          MMPLA415  KOLPOLA415
        3          MMPLA415  KOLPOLA415
    

        dfF['Final'] = (dfF['AlmostFinal'].replace({'KOPL':'KOLPOL'}, regex = True))
        dfF['Final'] = (dfF['AlmostFinal'].replace({'RWP':'KOLPOL'}, regex = True))
        dfF['Final'] = (dfF['AlmostFinal'].replace({'MMPL':'KOLPOL'}, regex = True))
    

    并且:如果我评论第2行和第3行代替了Kopl的工作。



    3 回复  |  直到 6 年前
        1
  •  1
  •   cs95 abhishek58g    6 年前

    replace regex=True

    df['Final'] = df['AlmostFinal'].replace(
        [r'KOPL', r'RWP.*?(?=A|B)', r'MM.*(?=A|B)'], 'KOLPOL', regex=True)
    df
    
       Sample AlmostFinal       Final
    0       1    KOPLA234  KOLPOLA234
    1       1    KOPLA234  KOLPOLA234
    2       2    RWPLB253  KOLPOLB253
    3       3    MMPLA415  KOLPOLA415
    4       3    MMPLA415  KOLPOLA415
    


    pat = ['KOPL', 'RWP', 'MM']
    df['Final'] = df['AlmostFinal'].replace(
        [rf'{p}.*(?=A|B)' for p in pat], 'KOLPOL', regex=True)  # need python3.6+
    df
    
       Sample AlmostFinal       Final
    0       1    KOPLA234  KOLPOLA234
    1       1    KOPLA234  KOLPOLA234
    2       2    RWPLB253  KOLPOLB253
    3       3    MMPLA415  KOLPOLA415
    4       3    MMPLA415  KOLPOLA415
    

    pat = ['KOPL', 'RWPL', 'MMPL']
    df['AlmostFinal'].replace(pat, 'KOLPOL', regex=True)
    
    0    KOLPOLA234
    1    KOLPOLA234
    2    KOLPOLB253
    3    KOLPOLA415
    4    KOLPOLA415
    Name: AlmostFinal, dtype: object
    

        2
  •  1
  •   Masklinn kmdreko    6 年前

    {
        'KOPL':'KOLPOL',
        'RWP':'KOLPOL',
        'MMP':'KOLPOL',
    }
    

    df['Final']

        3
  •  1
  •   DYZ    6 年前

    dfF['Final'] = dfF['AlmostFinal']\
                   .replace({'KOP|RWP|MMP': 'KOLPO'}, regex = True)