2017-02-09 4 views
1

Попытка узнать кое-что, я возился с глобальной базой атак акул на Kaggle, и я пытаюсь найти лучший способ разбить строки, используя функцию lambda и str.contains.Использование lambda условных и pandas str.contains для комков строк

В любом случае строка содержит фразу с skin diving, например. 'skin diving for abalone', в столбце data['Activity'] Я хочу заменить действие skin diving. (Есть 92 вариантов для подводной охоты, следовательно, пытаются использовать функцию лямбды)

я могу вернуть булеву серию, используя

data['Activity].str.contains('skin diving') 

Но я не уверен, как изменить значение, если это условие истинно

Моя функция лямбда = data.apply(lambda x: 'free diving' if x.str.contains('free diving)), но я получаю синтаксическую ошибку, и я недостаточно хорошо знаком с функциями лямбда и пандами, чтобы получить ее правильно, любая помощь будет оценена.

+0

Если выражение 'if' должно содержать' else': 'x if condition else y'. У вашей лямбды нет части 'else'. – DyZ

ответ

3

Вместо того, чтобы использовать метод Series.str, вы можете использовать в оператора в вашем лямбда для проверки подстроки

data['activity'] = data['activity'].apply(lambda x: 'skin diving' if 'skin diving' in x else x) 
+0

Спасибо, очень полезно. Я не думал о 'in' operator – hselbie

+0

Как использовать регулярное выражение для строки? Я хочу, чтобы цикл через ячейки ячеек, и если ячейка содержит скобки '(' или ')' что-то делать, а делать что-то еще – Growler

0

Вы можете использовать метод str.containsnp.where с

In [141]: df 
Out[141]: 
     activity 
0 free diving ok 
1    ok 

In [142]: df.activity = np.where(df.activity.str.contains('free diving'), 
           'free diving', df.activity) 

In [143]: df 
Out[143]: 
     activity 
0 free diving 
1   ok 
Смежные вопросы