Заменить всю строку, если она содержит подстроку в pandas
Я хочу, чтобы заменить все строки, содержащие определенную подстроку. Так, например, если у меня есть этот dataframe:
import pandas as pd
df = pd.DataFrame({'name': ['Bob', 'Jane', 'Alice'],
'sport': ['tennis', 'football', 'basketball']})
я мог бы заменить футбол на строку "ball sport", как это:
df.replace({'sport': {'football': 'ball sport'}})
то, что я хочу, хотя это заменить все, что содержит ball
(в данном случае football
и basketball
) С 'ball sport'. Что-то вроде этого:--7-->
df.replace({'sport': {'[strings that contain ball]': 'ball sport'}})
4 ответов
можно использовать 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
чтобы сделать его нечувствительным к регистру pass ' case=False:
df.loc[df['sport'].str.contains('ball', case=False), 'sport'] = 'ball sport'
можно использовать apply
лямбда. The x
параметром лямбда-функции будет каждое значение в столбце "спорт":
df.sport = df.sport.apply(lambda x: 'ball sport' if 'ball' in x else x)
можно использовать 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