3 классные малоизвестные функции Pandas



Книга 3 классные малоизвестные функции Pandas

Я и раньше писал о Pandas по очевидным причинам — это изумительная библиотека для анализа данных и даже для визуализации. Предыдущая статья была о функциях, которые стоит чаще использовать, потому что они: 


  • держат ваш код в чистоте;
  • не заставляют вас заново изобретать колесо.

Однако в сегодняшнем посте я хочу сместить фокус на некоторые более полезные функции, которые заставили меня почувствовать себя полнейшим идиотом. Почему же, спросите вы. Я ленился и не гуглил перед тем, как писать код, и поэтому просто не знал о существовании этих функций. 


Конечный результат был разочаровывающим. Я реализовывал необходимую логику, но ценой нескольких лишних часов, седых волос и, безусловно, кучи ненужного кода. 


Ниже перечисленные функции помогут избежать подобных ошибок. 


idxmin() и idxmax()


Да, я уже писал о них ранее, но они необходимы, чтобы этот пост имел смысл. Вы не сможете понять вторую полезную функцию, если не разберетесь предварительно с этими. 


Вкратце, эти функции возвращают ID (индекс) нужной записи. Скажем, я создам следующий массив Pandas:



И хочу найти индексы наименьшего и наибольшего элементов. Разумеется, очень легко найти их и так, но никогда (я действительно имею в виду никогда) не бывает настолько мало данных в проектах. 


Это означает, что эти функции вам точно пригодятся. Давайте посмотрим, как: 




Имейте в виду, что функции возвращают индекс первого наблюдаемого наименьшего или наибольшего значений. 


ne()


Эта функция стала для меня открытием. Некоторое время назад я работал с временными данными, и у меня возникли проблемы, когда несколько первых наблюдаемых значений были равны 0. 


Проще говоря, представьте, что вы купили что-то, но не использовали в течение некоторого времени. Вещь находится в вашем распоряжении, но, раз вы ее не используете, потребление в этот период равно 0. В случае, если меня интересует именно потребление и оно начинается с момента фактического использования вещи, функция ne() прекрасно подойдет.


Давайте рассмотрим следующий сценарий: у вас есть объект Pandas DataFrame с несколькими нулевыми значениями в начале: 



Функция ne() вернет True, если текущее значение не равно заданному (скажем 0), и False в обратном случае:



Само по себе это не очень полезно. Помните, что выше я отметил, что вам нужно знать idxmax(), чтобы понять эту тему? Что ж, вот и оно, вы можете включить idxmax() в код ниже: 



Итак, в индексе 6 у нас впервые появляется ненулевое значение. Еще раз — это пока еще не представляет большой ценности. А вот что действительно можно сделать, так это использовать эту информацию, чтобы DataFrame выводил только значения, начинающиеся с того момента, когда элемент был впервые использован: 



И это полезно каждый раз, когда вы имеете дело с временными данными. 


nsmallest() и nlargest()


Я думаю, вы догадались о назначении этих функций по именам. Скажем, я создам следующий объект DataFrame:



Давайте предположим, что это 5 записей баллов, полученных после написания теста. И нам нужно найти трех студентов, которые справились хуже всех:



Или трех студентов, которые справились лучше всех:



Эти две функции являются отличной заменой таким функциям, как sort_values().




482   0  

Comments

    Ничего не найдено.