Решено: панди филтрират редове по размити стойности

Последна актуализация: 09/11/2023

В света на анализа на данни е обичайно да се срещат големи набори от данни, които изискват манипулиране и обработка на данни. Един такъв проблем, който често възниква, е филтрирането на редове въз основа на размити стойности, особено когато се работи с текстови данни. Pandas, популярна библиотека на Python за манипулиране на данни, предоставя елегантно решение за справяне с този проблем. В тази статия ще се потопим в това как да използваме Pandas за филтриране на редове с помощта на размити стойности, ще изследваме кода стъпка по стъпка и ще обсъдим съответните библиотеки и функции, които могат да помогнат при решаването на подобни проблеми.

За да започнем да се занимаваме с този проблем, ще използваме Пандите библиотека заедно с fuzzywuzzy библиотека, която помага да се изчисли приликата между различни низове. The fuzzywuzzy библиотеката използва разстоянието на Levenshtein, мярка за сходство, базирана на броя редакции (вмъквания, изтривания или замествания), необходими за трансформиране на един низ в друг.

Инсталиране и импортиране на необходимите библиотеки

За да започнем, ще трябва да инсталираме и импортираме необходимите библиотеки. Можете да използвате 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)

Ако приемем, че искаме да филтрираме редове, съдържащи дрехи с имена, подобни на „Tee shirt“, ще трябва да използваме библиотеката 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)

В горния код ние дефинираме функция филтър_редове който приема четири параметъра: DataFrame, името на колоната, низа за търсене и прага на подобие. Той връща филтриран DataFrame въз основа на посочения праг, който се изчислява с помощта на fuzz.token_sort_ratio функция от библиотеката fuzzywuzzy.

Разбиране на кода стъпка по стъпка

  • Първо създаваме DataFrame, наречена df съдържащ нашия набор от данни.
  • След това дефинираме нашия низ за търсене като „Tee shirt“ и задаваме праг на сходство от 70. Можете да коригирате праговата стойност според желаното от вас ниво на сходство.
  • След това създаваме функция, наречена филтър_редове, който филтрира DataFrame въз основа на разстоянието на Levenshtein между низа за търсене и стойността на всеки ред в указаната колона.
  • Накрая наричаме филтър_редове функция за получаване на нашия филтриран DataFrame, filtered_df.

В заключение, Pandas, в комбинация с библиотеката fuzzywuzzy, е отличен инструмент за филтриране на редове въз основа на размити стойности. Разбирането на тези библиотеки и техните функции ни позволява ефективно да манипулираме данни и да решаваме сложни задачи за обработка на данни.

Подобни публикации: