【问题标题】:Remove whitespace in a string for multiple dataframe columns删除多个数据框列的字符串中的空格
【发布时间】:2020-09-02 09:29:10
【问题描述】:

我有一个数据框,其中多个列可以包含特定的正则表达式。我的正则表达式匹配我有可变数量的大写字母后跟一个空格和数字的模式。

import pandas as pd 

pattern = re.compile(r"[A-Z]+\s\d+")
df = pd.DataFrame({'Title':['Foo ABC 1234', 'Correct Foo BCD1234', 'Still Wrong DEEF 9345'], 
                    'Description':['Nothing special here XYC1235', 'This is a normal description.', 'This contains BDE 234'], 
                    'Numbers':['BCD1234', 'XYC1235', 'DKO 15000']}) 

我只想在所有已定义的列['Title', 'Description', 'Numbers'] 中找到这些匹配项,并删除单数空格,例如:

ABC 1234 ---> ABC1234

我有什么办法可以做到这一点吗?

到目前为止,我尝试使用 re.findall(),但它只返回匹配列表,当我尝试替换子字符串时,它不会修改原始数据帧。

【问题讨论】:

    标签: python regex pandas dataframe


    【解决方案1】:

    你可以使用.replace:

    df = df.replace(r'([A-Z]+)\s(\d+)', r'\1\2', regex=True)
    

    或者,仅替换指定列:

    df[['Title', 'Description', 'Numbers']] = df[['Title', 'Description', 'Numbers']].replace(r'([A-Z]+)\s(\d+)', r'\1\2', regex=True)
    

    这里,([A-Z]+)\s(\d+) 将一个或多个大写字母匹配并捕获到组 1 中,(\d+) 将一个或多个数字匹配到组 2 中,并且之间的空格将被匹配,但不会被捕获。替换包含对捕获的组值的两个反向引用,因此中间的空格将被删除。

    【讨论】:

    • 感谢组的解释。现在完美运行!
    猜你喜欢
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2019-09-06
    • 2017-06-30
    • 2022-11-03
    • 2011-08-05
    相关资源
    最近更新 更多