Riješeno: pandas filtrira redove prema nejasnim vrijednostima

Posljednje ažuriranje: 09/11/2023

U svijetu analize podataka, uobičajeno je naići na velike skupove podataka koji zahtijevaju manipulaciju i obradu podataka. Jedan takav problem koji se često pojavljuje je filtriranje redova na osnovu nejasnih vrijednosti, posebno kada se radi o tekstualnim podacima. Pandas, popularna Python biblioteka za manipulaciju podacima, pruža elegantno rješenje koje pomaže u rješavanju ovog problema. U ovom članku ćemo uroniti u to kako koristiti Pandas za filtriranje redova koristeći nejasne vrijednosti, istražiti kod korak po korak i razgovarati o relevantnim bibliotekama i funkcijama koje mogu pomoći u rješavanju sličnih problema.

Da bismo započeli rješavanje ovog problema, iskoristit ćemo Pandas biblioteka zajedno sa fuzzywuzzy biblioteka koja pomaže u izračunavanju sličnosti između različitih nizova. The fuzzywuzzy biblioteka koristi Levenshtein distancu, mjeru sličnosti zasnovanu na broju izmjena (umetanja, brisanja ili zamjena) potrebnih za transformaciju jednog stringa u drugi.

Instaliranje i uvoz potrebnih biblioteka

Za početak, morat ćemo instalirati i uvesti potrebne biblioteke. Možete koristiti pip da instalirate i Pandas i fuzzywuzzy:

pip install pandas
pip install fuzzywuzzy

Nakon instalacije, uvezite biblioteke u svoj Python kod:

import pandas as pd
from fuzzywuzzy import fuzz, process

Filtriranje redova na temelju nejasnih vrijednosti

Sada kada smo uvezli potrebne biblioteke, hajde da kreiramo izmišljeni skup podataka i pokažemo kako da filtriramo redove na osnovu nejasnih vrednosti. U ovom primjeru, naš skup podataka sastojat će se od naziva odjevnih predmeta i njihovih odgovarajućih stilova.

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

Pod pretpostavkom da želimo da filtriramo redove koji sadrže odevne predmete sa nazivima sličnim „Tee shirt“, moraćemo da upotrebimo fuzzywuzzy biblioteku da bismo to postigli.

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)

U gornjem kodu definiramo funkciju filter_rows koji uzima četiri parametra: DataFrame, ime kolone, string za pretraživanje i prag sličnosti. Vraća filtrirani DataFrame na osnovu navedenog praga, koji se izračunava pomoću fuzz.token_sort_ratio funkcija iz fuzzywuzzy biblioteke.

Razumijevanje koda korak po korak

  • Prvo kreiramo DataFrame pod nazivom df koji sadrže naš skup podataka.
  • Zatim definiramo naš niz za pretraživanje kao “Tee shirt” i postavljamo prag sličnosti od 70. Možete podesiti vrijednost praga prema željenom nivou sličnosti.
  • Zatim kreiramo funkciju pod nazivom filter_rows, koji filtrira DataFrame na osnovu Levenshtein udaljenosti između niza za pretraživanje i vrijednosti svakog reda u navedenoj koloni.
  • Konačno, zovemo filter_rows funkcija za dobivanje našeg filtriranog okvira podataka, filtered_df.

U zaključku, Pandas, u kombinaciji sa fuzzywuzzy bibliotekom, je odličan alat za filtriranje redova na osnovu fuzzy vrednosti. Razumijevanje ovih biblioteka i njihovih funkcija omogućava nam da efikasno manipuliramo podacima i rješavamo složene zadatke obrade podataka.

Slični postovi: