Solved: pandas filter rows by fuzzy values

Sa mundo ng pagsusuri ng data, karaniwan nang makatagpo ng malalaking set ng data na nangangailangan ng pagmamanipula at pagproseso ng data. Ang isang ganoong problema na madalas lumitaw ay ang pag-filter ng mga hilera batay sa malabo na mga halaga, lalo na kapag nakikitungo sa data ng teksto. Ang Pandas, isang sikat na library ng Python para sa pagmamanipula ng data, ay nagbibigay ng eleganteng solusyon upang makatulong sa pagharap sa isyung ito. Sa artikulong ito, susuriin natin kung paano gamitin ang mga Panda upang i-filter ang mga row gamit ang mga malabo na halaga, i-explore ang code nang sunud-sunod, at talakayin ang mga nauugnay na library at function na maaaring makatulong sa paglutas ng mga katulad na problema.

Upang simulan ang pagtugon sa problemang ito, gagamitin namin ang Pandas aklatan kasama ang fuzzywuzzy library na tumutulong sa pagkalkula ng pagkakatulad sa pagitan ng iba't ibang mga string. Ang fuzzywuzzy ginagamit ng library ang Levenshtein distance, isang sukatan ng pagkakatulad batay sa bilang ng mga pag-edit (insertion, deletion, o substitutions) na kailangan upang baguhin ang isang string sa isa pa.

Pag-install at Pag-import ng Mga Kinakailangang Aklatan

Upang magsimula, kakailanganin naming i-install at i-import ang mga kinakailangang library. Maaari mong gamitin ang pip upang i-install ang parehong Pandas at fuzzywuzzy:

pip install pandas
pip install fuzzywuzzy

Kapag na-install, i-import ang mga aklatan sa iyong Python code:

import pandas as pd
from fuzzywuzzy import fuzz, process

Pag-filter ng Mga Row Batay sa Mga Fuzzy Value

Ngayong na-import na natin ang mga kinakailangang aklatan, gumawa tayo ng isang kathang-isip na set ng data at ipakita kung paano i-filter ang mga hilera batay sa mga malabo na halaga. Sa halimbawang ito, ang aming set ng data ay bubuo ng mga pangalan ng damit at ang mga kaukulang istilo ng mga ito.

data = {'Garment': ['T-shirt', 'Polo shirt', 'Jeans', 'Leather jacket', 'Winter coat'],
        'Style': ['Casual', 'Casual', 'Casual', 'Biker', 'Winter']}
df = pd.DataFrame(data)

Ipagpalagay na gusto naming i-filter ang mga row na naglalaman ng mga kasuotan na may mga pangalan na katulad ng "Tee shirt", kakailanganin naming gamitin ang fuzzywuzzy library upang magawa ito.

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)

Sa code sa itaas, tinukoy namin ang isang function filter_rows na tumatagal ng apat na parameter: ang DataFrame, ang pangalan ng column, ang string ng paghahanap, at ang threshold ng pagkakatulad. Nagbabalik ito ng na-filter na DataFrame batay sa tinukoy na threshold, na kinakalkula gamit ang fuzz.token_sort_ratio function mula sa fuzzywuzzy library.

Pag-unawa sa Code Step-by-Step

  • Una, gumawa kami ng DataFrame na tinatawag df naglalaman ng aming set ng data.
  • Susunod, tinukoy namin ang aming string sa paghahanap bilang "Tee shirt" at nagtatakda ng threshold ng pagkakatulad na 70. Maaari mong ayusin ang halaga ng threshold ayon sa gusto mong antas ng pagkakapareho.
  • Pagkatapos ay lumikha kami ng isang function na tinatawag filter_rows, na nagsasala sa DataFrame batay sa Levenshtein na distansya sa pagitan ng string ng paghahanap at ang halaga ng bawat hilera sa tinukoy na column.
  • Sa wakas, tinatawagan namin ang filter_rows function upang makuha ang aming na-filter na DataFrame, filtered_df.

Sa konklusyon, ang Pandas, kasama ang fuzzywuzzy library, ay isang mahusay na tool para sa pag-filter ng mga row batay sa mga malabo na halaga. Ang pag-unawa sa mga library na ito at ang kanilang mga function ay nagbibigay-daan sa amin na mahusay na manipulahin ang data at lutasin ang mga kumplikadong gawain sa pagproseso ng data.

Kaugnay na mga post:

Mag-iwan ng komento