【问题标题】:Regex replace first two letters within column in python正则表达式替换python中列中的前两个字母
【发布时间】:2021-12-22 08:04:48
【问题描述】:

我有一个数据框,例如

COL1
A_element_1_+_none 
C_BLOCA_element 
D_element_3
element_'
BasaA_bloc
B_basA_bloc
BbasA_bloc

我想删除COL1 每一行中的第一个2 letters,前提是它们在该列表中:

the_list =['A_','B_','C_','D_'] 

那么我应该得到以下输出:

COL1
element_1_+_none 
BLOCA_element 
element_3
element_'
BasaA_bloc
basA_bloc
BbasA_bloc

到目前为止,我尝试了以下方法:

df['COL1']=df['COL1'].str.replace("A_","")
df['COL1']=df['COL1'].str.replace("B_","")
df['COL1']=df['COL1'].str.replace("C_","")
df['COL1']=df['COL1'].str.replace("D_","")

但它也删除了诸如 row2 A_ 中的模式,并且不只删除前 2 个字母...

【问题讨论】:

    标签: python regex pandas


    【解决方案1】:

    如果the_list 中要替换的值始终具有该格式,您还可以考虑使用 str.replace 与一个简单的模式匹配一​​个大写字符 AD 后跟字符串 ^[A-D]_ 开头的下划线

    import pandas as pd
    
    strings = [
        "A_element_1_+_none ",
        "C_BLOCA_element ",
        "D_element_3",
        "element_'",
        "BasaA_bloc",
        "B_basA_bloc",
        "BbasA_bloc"
    ]
    
    df = pd.DataFrame(strings, columns=["COL1"])
    df['COL1'] = df['COL1'].str.replace(r"^[A-D]_", "")
    
    print(df)
    

    输出

                    COL1
    0  element_1_+_none 
    1     BLOCA_element 
    2          element_3
    3          element_'
    4         BasaA_bloc
    5          basA_bloc
    6         BbasA_bloc
    

    【讨论】:

    • 在她的情况下,由于列表中的字母是从 A 到 D,所以应该是:df['COL1'].str.replace(r"^[A-D]_", "")
    • @alphaBetaGamma 我又读了一遍,也是这么想的 :-) 谢谢!
    【解决方案2】:

    您还可以使用 pandas 中的 apply() 函数。因此,如果字符串具有相关模式,我们省略前两个字符,否则返回整个字符串。

    d["COL1"] = d["COL1"].apply(lambda x: x[2:] if x.startswith(("A_","B_","C_","D_")) else x)
    

    【讨论】:

      猜你喜欢
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多