Преобразование основных данных в Pandas с помощью этих трех полезных методов

Погружение в фильтрацию, манипулирование и функционирование

Фото Милад Факуриан on Unsplash

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

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

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

Давайте поговорим о трёх способах сделать это.

Фильтрация, но объясненная правильно

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

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

Изображение по автору

Мы собираемся отфильтровать любые баллы ниже 90, потому что в этот день мы решили быть плохо подготовленными преподавателями, которые обслуживают только лучших учеников (пожалуйста, никогда не делайте этого). Стандартная строка кода для этого выглядит следующим образом:

оценки[оценки['Оценка'] >= 90]
Изображение по автору

У нас остаются Джек и Гермиона. Прохладный. Но что именно здесь произошло? почему работает ли приведенная выше строка кода? Давайте углубимся немного глубже, взглянув на вывод выражения внутри внешних скобок выше:

оценки['Оценка'] >= 90
Изображение по автору

Ах хорошо. В этом есть смысл. Похоже, что эта строка кода возвращает объект Pandas Series, который содержит логическое значение ( True / False ) значения, определяемые тем, чем >= 90 возвращается для каждой отдельной строки. Это ключевой промежуточный шаг. После этого именно эта серия логических значений передается во внешние скобки и соответствующим образом фильтрует все строки.

Для завершения я также упомяну, что того же самого поведения можно добиться, используя loc ключевое слово:

Grades.loc[grades['Score'] >= 90]
Изображение по автору

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

На данный момент важной целью обучения является следующее: когда мы фильтруем в Pandas, запутанный синтаксис не является какой-то странной магией. Нам просто нужно разбить его на два компонента: 1) получение логической серии строк, удовлетворяющих нашему условию, и 2) использование серии для фильтрации всего DataFrame.

Почему это полезно, спросите вы? Ну, вообще говоря, это может привести к запутанным ошибкам, если вы просто используете операции, не понимая, как они на самом деле работают. Фильтрация — полезная и невероятно распространенная операция, и теперь вы знаете, как она работает.

Давайте двигаться дальше.

Красота лямбда-функций

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

Введите лямбда-функции — полезная функция языка, которая прекрасно интегрируется с Pandas.

В качестве краткого обзора, вот как работают лямбды:

>>> add_function = лямбда x, y: x + y
>>> add_function(2, 3)
5

Лямбда-функции ничем не отличаются от обычных функций, за исключением того, что они имеют более краткий синтаксис:

  • Имя функции слева от знака равенства
  • Ассоциация lambda ключевое слово справа от знака равенства (аналогично def ключевое слово в традиционном определении функции Python, это позволяет Python узнать, что мы определяем функцию).
  • Параметр(ы) после lambda ключевое слово слева от двоеточия.
  • Возвращаемое значение справа от двоеточия.

Теперь давайте применим лямбда-функции к реальной ситуации.

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

Изображение по автору

Теперь, как Высочества Мастера Данных этой компании, нам предоставили некоторую сверхсекретную информацию: всем в этой компании будет повышена зарплата на 10% плюс дополнительные 1000 долларов. Вероятно, это слишком специфичный расчет, чтобы найти для него конкретный метод, но достаточно простой с лямбда-функцией:

update_income = лямбда-число: число + (число * .10) + 1000

Затем все, что нам нужно сделать, это использовать эту функцию с Pandas. apply функция, которая позволяет нам применить функцию к каждому элементу выбранной серии:

деньги['Новый доход'] = деньги['Доход'].apply(update_income)
денежные суммы
Изображение по автору

И мы закончили! Великолепный новый DataFrame, содержащий именно ту информацию, которая нам нужна, и все это в двух строках кода. Чтобы сделать это еще более кратким, мы могли бы даже определить лямбда-функцию внутри apply прямо — классный совет, который стоит иметь в виду.

Я буду говорить здесь просто.

Лямбды чрезвычайно полезны, и поэтому вам следует их использовать. Наслаждаться!

Функции манипулирования строками серий

В предыдущем разделе мы говорили об универсальности лямбда-функций и обо всех интересных вещах, которые они могут помочь вам выполнить с вашими данными. Это превосходно, но вам следует быть осторожным, чтобы не увлечься. Невероятно часто настолько увлекаться одним знакомым способом выполнения задач, что упускаешь из виду более простые ярлыки, которыми Python благословил программистов. Конечно, это относится не только к лямбда-выражениям, но на данный момент мы остановимся на этом.

Например, предположим, что у нас есть следующий DataFrame с именем names который хранит имена и фамилии людей:

Изображение по автору

Теперь, из-за ограничений места в нашей базе данных, мы решили, что вместо хранения всей фамилии человека более эффективно просто хранить его последний инициал. Таким образом, нам необходимо преобразовать 'Last Name' столбец соответственно. С лямбда-выражениями наша попытка сделать это может выглядеть примерно так:

имена['Фамилия'] = имена['Фамилия'].apply(lambda s: s[:1])
имена
Изображение по автору

Это явно работает, но немного неуклюже и, следовательно, не так питонично, как могло бы быть. К счастью, благодаря красоте функций манипулирования строками в Pandas, есть другой, более элегантный способ (для следующей строки кода просто предположим, что мы еще не изменили 'Last Name' столбец с приведенным выше кодом):

имена['Фамилия'] = имена['Фамилия'].str[:1]
имена
Изображение по автору

Та-да! .str Свойство серии Pandas позволяет нам объединять каждую строку в серии с указанной строковой операцией, как если бы мы работали с каждой строкой индивидуально.

Но подождите, дальше станет лучше. С .str эффективно позволяет нам получить доступ к обычным функциям строки через Series, мы также можем применять ряд строковых функций, которые помогут быстро обрабатывать наши данные! Например, предположим, что мы решили преобразовать оба столбца в нижний регистр. Следующий код выполняет эту работу:

имена['Имя'] = имена['Имя'].str.lower()
имена['Фамилия'] = имена['Фамилия'].str.lower()
имена
Изображение по автору

Гораздо проще, чем тратить время на определение собственных лямбда-функций и вызов строковых функций внутри них. Не то чтобы я не любил лямбды — но всему есть свое место, и простота всегда должна иметь приоритет в Python.

Я рассмотрел здесь лишь несколько примеров, но в вашем распоряжении большая коллекция строковых функций [1].

Используйте их щедро. Они превосходны.

Заключительные мысли и резюме

Вот вам небольшая шпаргалка по преобразованию данных:

  1. Фильтруйте так, как вы это имеете в виду. Узнайте, что происходит на самом деле, чтобы знать, что делаете.
  2. Обожаю ваши лямбды. Они могут помочь вам удивительными способами манипулировать данными.
  3. Панды любят струны так же, как и вы.. Там много встроенного функционала — вы вполне можете его использовать.

И последний совет: не существует «правильного» способа фильтрации набора данных. Это зависит от имеющихся данных, а также от уникальной проблемы, которую вы хотите решить. Однако, хотя не существует определенного метода, которому вы могли бы следовать каждый раз, в вашем распоряжении есть полезная коллекция инструментов. В этой статье я рассмотрел три из них.

Я призываю вас выйти и найти еще что-нибудь.

Рекомендации

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

Преобразование основных данных в Pandas с помощью этих трех полезных методов, переизданных из источника 20699 через https://towardsdatascience.com/feed

<!–

->

Отметка времени:

Больше от Блокчейн-консультанты