Разница между drop и select_dtypes в пандах - PullRequest
0 голосов
/ 01 ноября 2018

В чем разница между этими двумя методами для удаления строки, если в столбце «поиск» найдена строка «что-то»?

Первый метод:

mydata = mydata.set_index("search")
mydata = mydata.drop("something", axis=0)

Этот метод кажется довольно простым и понятным.

Второй метод:

mydata = mydata[~mydata.select_dtypes(['object']).eq('something').any(1)]

Я действительно не знаю, как работает этот метод. Где в этой строке указано, чтобы удалить / удалить строку? И почему он работает с «объектом» вместо «поиска»? Что означает "~"? Я просто не могу найти это в документации.

1 Ответ

0 голосов
/ 01 ноября 2018

Ваши два метода не идентичны. Давайте посмотрим на второй метод по частям.

Шаг 1: поднабор данных с помощью select_dtypes

mydata.select_dtypes(['object']) фильтрует ваш фрейм данных только для серии с object dtype. Вы можете извлечь dtype каждой серии через mydata.dtypes. Как правило, нечисловые серии будут иметь тип object dtype, который указывает последовательность указателей, аналогично list.

В этом случае ваши два метода выравниваются, только когда серия search является единственной object серией dtype.

Шаг 2: Проверка на равенство с помощью eq

Поскольку шаг 1 возвращает фрейм данных , даже если он содержит только одну серию, pd.DataFrame.eq вернет фрейм данных с логическими значениями.

Шаг 3: Проверка любого значения True построчно с помощью any

Затем ваш второй метод проверяет, является ли какое-либо значение True построчным (axis=1). Опять же, если ваша единственная серия object равна search, то это равнозначно тому же, что и ваш первый метод.

Если у вас несколько рядов object, то ваши два метода могут не совпадать, так как строка может быть исключена из-за того, что другой ряд равен 'something'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...