Løst: pandaer filtrerer rader etter uklare verdier

Siste oppdatering: 09/11/2023

I en verden av dataanalyse er det vanlig å støte på store datasett som krever datamanipulering og -behandling. Et slikt problem som ofte oppstår er filtrering av rader basert på uklare verdier, spesielt når det gjelder tekstdata. Pandas, et populært Python-bibliotek for datamanipulering, gir en elegant løsning for å takle dette problemet. I denne artikkelen skal vi dykke ned i hvordan du bruker Pandas til å filtrere rader ved hjelp av uklare verdier, utforske koden trinn for trinn og diskutere relevante biblioteker og funksjoner som kan hjelpe til med å løse lignende problemer.

For å begynne å løse dette problemet, vil vi utnytte pandaer bibliotek sammen med fuzzywuzzy bibliotek som hjelper til med å beregne likheten mellom forskjellige strenger. De fuzzywuzzy biblioteket bruker Levenshtein-avstanden, et mål på likhet basert på antall redigeringer (innsettinger, slettinger eller erstatninger) som trengs for å transformere en streng til en annen.

Installere og importere nødvendige biblioteker

For å starte, må vi installere og importere de nødvendige bibliotekene. Du kan bruke pip til å installere både Pandaer og fuzzywuzzy:

pip install pandas
pip install fuzzywuzzy

Når du er installert, importerer du bibliotekene i Python-koden din:

import pandas as pd
from fuzzywuzzy import fuzz, process

Filtrering av rader basert på uklare verdier

Nå som vi har importert de nødvendige bibliotekene, la oss lage et fiktivt datasett og vise frem hvordan du filtrerer rader basert på uklare verdier. I dette eksemplet vil datasettet vårt bestå av plaggnavn og deres tilsvarende stiler.

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

Forutsatt at vi ønsker å filtrere rader som inneholder plagg med navn som ligner på "T-skjorte", må vi bruke fuzzywuzzy-biblioteket for å oppnå dette.

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)

I koden ovenfor definerer vi en funksjon filter_rader som tar fire parametere: DataFrame, kolonnenavnet, søkestrengen og likhetsterskelen. Den returnerer en filtrert DataFrame basert på den angitte terskelen, som beregnes ved hjelp av fuzz.token_sort_ratio funksjon fra fuzzywuzzy-biblioteket.

Forstå koden trinn for trinn

  • Først lager vi en DataFrame kalt df som inneholder vårt datasett.
  • Deretter definerer vi søkestrengen vår som "T-skjorte" og setter en likhetsterskel på 70. Du kan justere terskelverdien i henhold til ønsket likhetsnivå.
  • Vi lager deretter en funksjon kalt filter_rader, som filtrerer DataFrame basert på Levenshtein-avstanden mellom søkestrengen og hver rads verdi i den angitte kolonnen.
  • Til slutt kaller vi filter_rader funksjon for å få vår filtrerte DataFrame, filtrert_df.

Avslutningsvis er Pandas, i kombinasjon med fuzzywuzzy-biblioteket, et utmerket verktøy for å filtrere rader basert på uklare verdier. Ved å forstå disse bibliotekene og deres funksjoner kan vi effektivt manipulere data og løse komplekse databehandlingsoppgaver.

Relaterte innlegg: