我想替换包含特定子字符串的所有字符串.例如,如果我有这个数据帧:
import pandas as pd
df = pd.DataFrame({'name': ['Bob', 'Jane', 'Alice'],
'sport': ['tennis', 'football', 'basketball']})
Run Code Online (Sandbox Code Playgroud)
我可以用这样的字符串'ball sport'替换足球:
df.replace({'sport': {'football': 'ball sport'}})
Run Code Online (Sandbox Code Playgroud)
我想,虽然是替换包含所有ball(在这种情况下football和basketball)与"球运动".像这样的东西:
df.replace({'sport': {'[strings that contain ball]': 'ball sport'}})
Run Code Online (Sandbox Code Playgroud)
EdC*_*ica 25
您可以使用str.contains屏蔽包含'ball'的行,然后使用新值覆盖:
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
Run Code Online (Sandbox Code Playgroud)
为了使它不区分大小写传递`case = False:
df.loc[df['sport'].str.contains('ball', case=False), 'sport'] = 'ball sport'
Run Code Online (Sandbox Code Playgroud)
piR*_*red 11
您可以使用 str.replace
df.sport.str.replace(r'(^.*ball.*$)', 'ball sport')
0 tennis
1 ball sport
2 ball sport
Name: sport, dtype: object
Run Code Online (Sandbox Code Playgroud)
重新分配
df['sport'] = df.sport.str.replace(r'(^.*ball.*$)', 'ball sport')
df
Run Code Online (Sandbox Code Playgroud)
您可以使用applylambda。xlambda函数的参数将是“运动”列中的每个值:
df.sport = df.sport.apply(lambda x: 'ball sport' if 'ball' in x else x)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21707 次 |
| 最近记录: |