Перетворення основних даних у Pandas за допомогою цих трьох корисних методів

Занурення у фільтрацію, маніпулювання та функціонування

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

Згадайте, коли востаннє ви працювали з добре відформатованим набором даних. Добре названі стовпці, мінімальна кількість відсутніх значень і правильна організація. Це приємне відчуття — майже звільнення — мати дані, які вам не потрібно очищати та трансформувати.

Що ж, це приємно, доки ви не вирветеся зі своєї мрії та не почнете возитися з безнадійною халепою розбитих рядків і безглуздих ярликів перед вами.

Немає такого поняття, як чисті дані (в їх оригінальній формі). Якщо ви фахівець із даних, ви це знаєте. Якщо ви тільки починаєте, ви повинні прийняти це. Вам потрібно буде трансформувати свої дані, щоб ефективно з ними працювати.

Давайте поговоримо про три способи зробити це.

Фільтрування — але пояснене належним чином

Давайте поговоримо про фільтрування — але трохи глибше, ніж ви, можливо, звикли робити. Як одна з найпоширеніших і найкорисніших операцій перетворення даних, ефективне фільтрування є обов’язковим навиком для будь-якого дослідника даних. Якщо ви знаєте панд, це, ймовірно, одна з перших операцій, які ви навчилися робити.

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

Зображення автора

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

оцінки[оцінки['Оцінка'] >= 90]
Зображення автора

Це залишає нас з Джеком і Герміоною. круто Але що саме тут сталося? Чому чи працює наведений вище рядок коду? Давайте зануримося глибше, подивившись на результат виразу всередині зовнішніх дужок вище:

оцінки ['Score'] >= 90
Зображення автора

А, гаразд. Що має сенс. Схоже, що цей рядок коду повертає об’єкт Pandas Series, який містить логічний ( True / False ) значення, що визначаються чим >= 90 повертається для кожного окремого рядка. Це ключовий проміжний крок. Згодом саме ця серія логічних значень передається у зовнішні дужки та відповідно фільтрує всі рядки.

На завершення я також згадаю, що такої ж поведінки можна досягти за допомогою loc ключове слово:

grades.loc[grades['Score'] >= 90]
Зображення автора

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

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

Ви можете запитати, чому це корисно? Ну, загалом кажучи, це може призвести до незрозумілих помилок, якщо ви просто використовуєте операції, не розуміючи, як вони насправді працюють. Фільтрування є корисною та неймовірно поширеною операцією, і тепер ви знаєте, як вона працює.

Перейдемо далі.

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

Іноді ваші дані потребують трансформацій, які просто не вбудовані у функціональність Pandas. Як би ви не намагалися, жодне пошукання Stack Overflow або ретельне вивчення документації Pandas не знайде вирішення вашої проблеми.

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

Як короткий огляд, ось як працюють лямбда-випромінювання:

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

Лямбда-функції нічим не відрізняються від звичайних функцій, за винятком того, що вони мають більш стислий синтаксис:

  • Назва функції зліва від знака рівності
  • Команда lambda ключове слово праворуч від знака рівності (подібно до def у традиційному визначенні функції Python, це дозволяє Python знати, що ми визначаємо функцію).
  • Параметр(и) після lambda ключове слово, ліворуч від двокрапки.
  • Повернене значення праворуч від двокрапки.

А тепер давайте застосуємо лямбда-функції до реалістичної ситуації.

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

Зображення автора

Тепер, як Високості Головних даних цієї компанії, ми отримали деяку надсекретну інформацію: кожен у цій компанії отримає 10% надбавки плюс додаткові 1000 доларів США. Ймовірно, це надто специфічний обчислення, щоб знайти конкретний метод, але досить прямолінійно з лямбда-функцією:

update_income = лямбда num: num + (num * .10) + 1000

Тоді все, що нам потрібно зробити, це використовувати цю функцію з Pandas apply функція, яка дозволяє застосувати функцію до кожного елемента вибраного ряду:

monies['New Income'] = monies['Income'].apply(update_income)
гроші
Зображення автора

І ми готові! Чудовий новий DataFrame, який містить саме ту інформацію, яка нам потрібна, у двох рядках коду. Щоб зробити це ще більш лаконічним, ми навіть могли б визначити лямбда-функцію всередині apply безпосередньо — крута порада, яку варто мати на увазі.

Я збережу суть тут простою.

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

Серія Функції маніпулювання рядками

У попередньому розділі ми говорили про універсальність лямбда-функцій і про всі цікаві речі, які вони можуть допомогти вам виконати з вашими даними. Це чудово, але слід бути обережним, щоб не захопитися. Надзвичайно часто настільки захоплюватися одним звичним способом виконання завдань, що ви пропускаєте простіші комбінації клавіш, якими Python благословив програмістів. Звичайно, це стосується не лише лямбда-виражень, але поки що ми залишимо це.

Наприклад, припустімо, що у нас викликається наступний DataFrame names який зберігає імена та прізвища людей:

Зображення автора

Тепер, через обмежений простір у нашій базі даних, ми вирішили, що замість того, щоб зберігати повне прізвище людини, ефективніше просто зберегти її останні ініціали. Таким чином, нам потрібно трансформувати 'Last Name' стовпець відповідно. З лямбдами наша спроба зробити це може виглядати приблизно так:

names['Last Name'] = names['Last Name'].apply(lambda s: s[:1])
Імена
Зображення автора

Це явно працює, але трохи незграбно, а тому не настільки Pythonic, як могло б бути. На щастя, з красою функцій маніпулювання рядками в Pandas є інший, більш елегантний спосіб (для цілей наступного рядка коду, просто продовжуйте і припускайте, що ми ще не змінили 'Last Name' стовпець із наведеним вище кодом):

names['Last Name'] = names['Last Name'].str[:1]
Імена
Зображення автора

Та-да! The .str Властивість серії Pandas дозволяє нам з’єднати кожен рядок у рядку за допомогою вказаної операції над рядком, так само, як якщо б ми працювали з кожним рядком окремо.

Але зачекайте, стане краще. Оскільки .str ефективно дає нам доступ до звичайної функціональності рядка через Series, ми також можемо застосувати низку функцій рядка, щоб допомогти швидко обробляти наші дані! Наприклад, скажімо, ми вирішили перетворити обидва стовпці на малі літери. Наступний код виконує цю роботу:

names['Ім'я'] = names['Ім'я'].str.lower()
names['Last Name'] = names['Last Name'].str.lower()
Імена
Зображення автора

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

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

Використовуйте їх щедро. Вони чудові.

Заключні думки та підсумок

Ось невелика шпаргалка для перетворення даних:

  1. Фільтруйте так, ніби ви це маєте на увазі. Дізнайтеся, що насправді відбувається, щоб знати, що ви робите.
  2. Люблю ваші лямбди. Вони можуть допомогти вам маніпулювати даними дивовижними способами.
  3. Панди люблять струни так само, як і ти. Є багато вбудованих функцій — ви також можете ними скористатися.

Остання порада: не існує «правильного» способу фільтрації набору даних. Це залежить від наявних даних, а також від унікальної проблеми, яку ви хочете вирішити. Однак, незважаючи на те, що немає встановленого методу, яким ви можете слідувати щоразу, у вашому розпорядженні є корисна колекція інструментів, яку варто мати. У цій статті я розглянув три з них.

Я закликаю вас вийти та знайти ще щось.

посилання

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

Перетворення основних даних у Pandas за допомогою цих трьох корисних методів, опублікованих із джерела https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 через https://towardsdatascience.com/feed

<!–

->

Часова мітка:

Більше від Консультанти з блокчейнів