Заменить всю строку, если она содержит подстроку в 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

enter image description here


другое str.contains

 df['support'][df.name.str.contains('ball')] = 'ball support'