【问题标题】:String replacement with pandas用熊猫替换字符串
【发布时间】:2017-03-12 05:05:12
【问题描述】:

我有一个 pandas 列,其中包含一些字符串值,例如:

White bear
Brown Bear
Brown Bear 100 Kg
White bear 200 cm             

如何检查所有字符串是否包含序列“白熊”并将整个值(不仅是序列)替换为像“White_bear”这样的字符串?

df['Species'] = df['Species'].str.replace('White bear', 'White_bear')   

不适合我,因为它只替换了序列。

【问题讨论】:

    标签: python regex string pandas dataframe


    【解决方案1】:

    您可以使用布尔索引:

    In [173]: df.loc[df.Species.str.contains(r'\bWhite\s+bear\b'), 'Species'] = 'White_bear'
    
    In [174]: df
    Out[174]:
                 Species
    0         White_bear
    1         Brown Bear
    2  Brown Bear 100 Kg
    3         White_bear
    

    或更通用的解决方案:

    In [204]: df
    Out[204]:
                 Species
    0         White bear
    1         Brown Bear
    2  Brown Bear 100 Kg
    3  White bear 200 cm
    
    In [205]: from_re = [r'.*?\bwhite\b\s+\bbear\b.*',r'.*?\bbrown\b\s+\bbear\b.*']
    
    In [206]: to_re = ['White_bear','Brown_bear']
    
    In [207]: df.Species = df.Species.str.lower().replace(from_re, to_re, regex=True)
    
    In [208]: df
    Out[208]:
          Species
    0  White_bear
    1  Brown_bear
    2  Brown_bear
    3  White_bear
    

    RegEx explanation

    【讨论】:

    • 谢谢!为什么需要这个 'r' 、\b 和 \s?没有它们它也可以工作
    • @ИонСынкетру,这些是正则表达式特殊符号:\s - 表示任何空格符号(空格或制表符),\b - 表示单词边界等。
    • from_re = [r'.*?\bwhite\s+\bbear\b.*', r'.*?\btiger\s+\bbear\b.*', r'.*?\bbull\s+\bear\b.*', r'.*?\blue\s+\bear\b.*', r'.*?\blacktip\s+\bear\b.*'] 我尝试为其他类型的熊做广告,但对他们来说没有用。为什么?
    • 我发现了我的错误,我在 blacktip 和 blue 之前丢失了一个 'b'
    • 试试这个:r'.*\d+.*'
    猜你喜欢
    • 2019-06-03
    • 1970-01-01
    • 2019-11-23
    • 2019-02-06
    • 2018-07-10
    • 2021-09-07
    • 2019-09-21
    • 2017-09-09
    相关资源
    最近更新 更多