В мире анализа данных часто встречаются большие наборы данных, требующие манипулирования и обработки данных. Одной из таких часто возникающих проблем является фильтрация строк на основе нечетких значений, особенно при работе с текстовыми данными. Pandas, популярная библиотека Python для обработки данных, предлагает элегантное решение, помогающее решить эту проблему. В этой статье мы рассмотрим, как использовать Pandas для фильтрации строк с использованием нечетких значений, пошагово изучим код и обсудим соответствующие библиотеки и функции, которые могут помочь в решении подобных проблем.
Чтобы приступить к решению этой проблемы, мы воспользуемся Панды библиотека вместе с нечеткий библиотека, которая помогает вычислить сходство между разными строками. нечеткий библиотека использует расстояние Левенштейна, меру подобия, основанную на количестве правок (вставок, удалений или замен), необходимых для преобразования одной строки в другую.
Установка и импорт необходимых библиотек
Для начала нам нужно установить и импортировать необходимые библиотеки. Вы можете использовать pip для установки Pandas и fuzzywuzzy:
pip install pandas pip install fuzzywuzzy
После установки импортируйте библиотеки в код Python:
import pandas as pd from fuzzywuzzy import fuzz, process
Фильтрация строк на основе нечетких значений
Теперь, когда мы импортировали необходимые библиотеки, давайте создадим вымышленный набор данных и продемонстрируем, как фильтровать строки на основе нечетких значений. В этом примере наш набор данных будет состоять из названий предметов одежды и соответствующих им стилей.
data = {'Garment': ['T-shirt', 'Polo shirt', 'Jeans', 'Leather jacket', 'Winter coat'], 'Style': ['Casual', 'Casual', 'Casual', 'Biker', 'Winter']} df = pd.DataFrame(data)
Предполагая, что мы хотим отфильтровать строки, содержащие предметы одежды с названиями, похожими на «Футболка», для этого нам потребуется использовать библиотеку fuzzywuzzy.
search_string = "Tee shirt" threshold = 70 def filter_rows(df, column, search_string, threshold): return df[df[column].apply(lambda x: fuzz.token_sort_ratio(x, search_string)) >= threshold] filtered_df = filter_rows(df, 'Garment', search_string, threshold)
В приведенном выше коде мы определяем функцию filter_rows который принимает четыре параметра: DataFrame, имя столбца, строку поиска и порог подобия. Он возвращает отфильтрованный кадр данных на основе указанного порога, который рассчитывается с использованием fuzz.token_sort_ratio функция из библиотеки fuzzywuzzy.
Понимание кода шаг за шагом
- Сначала мы создаем DataFrame с именем df содержащий наш набор данных.
- Затем мы определяем нашу строку поиска как «Футболка» и устанавливаем порог сходства 70. Вы можете настроить пороговое значение в соответствии с желаемым уровнем сходства.
- Затем мы создаем функцию с именем filter_rows, который фильтрует DataFrame на основе расстояния Левенштейна между строкой поиска и значением каждой строки в указанном столбце.
- Наконец, мы называем filter_rows функция для получения нашего отфильтрованного DataFrame, filtered_df.
В заключение, Pandas в сочетании с библиотекой fuzzywuzzy — отличный инструмент для фильтрации строк на основе нечетких значений. Понимание этих библиотек и их функций позволяет нам эффективно манипулировать данными и решать сложные задачи обработки данных.