Например, в рамке данных pandas ниже с 3 строками, все из которых являются строками. Я хочу отказаться от условия, if str[-1] == '-':
df = pd.DataFrame({'a': ["123-","123-1","123-2"]})
Но если я это сделаю
df[df['a'][-1]=='-']
Он вернет ошибку. Я знаю, что это можно сделать с помощью функции df.apply. Но мне просто интересно, можно ли это сделать с помощью маски.
Вы можете создать маску, используя регулярное выражение, как показано ниже. Знак доллара гарантирует, что дефис будет согласован только в конце строки.
df.a.str.contains('-$')
Это вернет булевскую серию. Используя ваш пример:
0 True
1 False
2 False
Затем вы можете отбросить строки, как обычно, с помощью df.drop()
:
df.drop(df[df.a.str.contains('-$')].index, inplace=True)
И сбросьте индекс, если хотите:
df.reset_index(inplace=True, drop=True)