Выберите строки в панд, которые не содержат определенного символа


Мне нужно что-то похожее на

.str.startswith() 
.str.endswith()

Но для средней части строки.

Например, дано следующее ПД.Фрейм данных

      str_name
   0    aaabaa
   1    aabbcb
   2    baabba
   3    aacbba
   4    baccaa
   5    ababaa

Мне нужно выбросить строки 1, 3 и 4, которые содержат (по крайней мере, одну) букву "С".
Положение конкретной буквы ("С") неизвестно.
Задача состоит в том, чтобы удалить все строки, которые содержат хотя бы одну конкретную букву

3   3   2017-01-20 03:50:15

3 ответа:

Вы хотите df['string_column'].str.contains('c')

>>> df
  str_name
0   aaabaa
1   aabbcb
2   baabba
3   aacbba
4   baccaa
5   ababaa
>>> df['str_name'].str.contains('c')
0    False
1     True
2    False
3     True
4     True
5    False
Name: str_name, dtype: bool

Теперь вы можете "удалить" вот так

>>> df = df[~df['str_name'].str.contains('c')]
>>> df
  str_name
0   aaabaa
2   baabba
5   ababaa
>>>

Отредактировано, чтобы добавить:

Если вы хотите проверить только первые символы k, вы можете slice. Предположим k=3:

>>> df.str_name.str.slice(0,3)
0    aaa
1    aab
2    baa
3    aac
4    bac
5    aba
Name: str_name, dtype: object
>>> df.str_name.str.slice(0,3).str.contains('c')
0    False
1    False
2    False
3     True
4     True
5    False
Name: str_name, dtype: bool

Примечание, Series.str.slice не ведет себя как типичный фрагмент Python.

Вы можете использовать str.содержит ()

str_name = pd.Series(['aaabaa', 'aabbcb', 'baabba', 'aacbba',  'baccaa','ababaa'])
str_name.str.contains('c')

Это вернет логическое

Следующее возвратит обратное вышеприведенному

~str_name.str.contains('c')

Вы можете использовать numpy

df[np.core.chararray.find(df.str_name.values.astype(str), 'c') < 0]

  str_name
0   aaabaa
2   baabba
5   ababaa