2016-09-29 58 views
3

我想替换包含特定子字符串的所有字符串。因此,举例来说,如果我有这样的数据帧:如果它包含熊猫中的子字符串,则替换整个字符串

import pandas as pd 
df = pd.DataFrame({'name': ['Bob', 'Jane', 'Alice'], 
        'sport': ['tennis', 'football', 'basketball']}) 

我可以用字符串“球运动”这样的取代足球:

df.replace({'sport': {'football': 'ball sport'}}) 

我想虽然是更换包含ball一切(以这种情况下footballbasketball)与'球运动'。事情是这样的:

df.replace({'sport': {'[strings that contain ball]': 'ball sport'}}) 

回答

5

您可以使用str.contains掩盖包含“球”的行,然后用新值覆盖:

In [71]: 
df.loc[df['sport'].str.contains('ball'), 'sport'] = 'ball sport' 
df 

Out[71]: 
    name  sport 
0 Bob  tennis 
1 Jane ball sport 
2 Alice ball sport 

为了使它不区分大小写通'的情况下=假:

df.loc[df['sport'].str.contains('ball', case=False), 'sport'] = 'ball sport' 
+0

感谢这工作:D此方法似乎区分大小写。有没有办法改变这种情况? – sk8r

+0

传递'case = False':'df ['sport']。str.contains('ball',case = False)' – EdChum

+0

很好,这是一个完美的解决方案,感谢您的帮助! – sk8r

3

您可以使用带有lambda的apply。 lambda函数的x参数将在 '运动' 列中的每个值:

df.sport = df.sport.apply(lambda x: 'ball sport' if 'ball' in x else x) 
+0

并添加一个小的通知 - 作品,如果不是'无'在'df.sport'中 – jezrael

2

可以使用str.replace

df.sport.str.replace(r'(^.*ball.*$)', 'ball sport') 

0  tennis 
1 ball sport 
2 ball sport 
Name: sport, dtype: object 

df['sport'] = df.sport.str.replace(r'(^.*ball.*$)', 'ball sport') 
df 

enter image description here

+0

您能添加时间吗? – jezrael

+0

感谢它的工作原理:)我如何更改正则表达式,使其不区分大小写? – sk8r

0

重新分配不同的str.contains

df['support'][df.name.str.contains('ball')] = 'ball support' 
相关问题