2016-10-29 137 views
2

我有一些字符串像值的大熊猫柱:字符串替换与熊猫

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

如何检查所有的字符串是否包含序列“白熊”和更换整个价值(不仅仅是序列)像'White_bear'字符串?

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

对我而言并不适合,因为它只替换了序列。

回答

3

您可以使用布尔索引:

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

+0

谢谢!为什么需要这个'r',\ b和\ s?它也可以在没有它们的情况下工作 – Sinchetru

+0

@ИонСынкетру,这些都是RegEx特殊符号:'\ s' - 表示任何空格符号(空格或制表符),'\ b' - 表示单词边界等。 – MaxU

+0

'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。*''' 我试过广告其他类型的熊,不工作。为什么? – Sinchetru