Michael Macaulay

Måste känna till Pandas -funktioner för maskininlärningsresa

Källnod: 1865356

Denna artikel publicerades som en del av Data Science Blogathon

Beskrivning

Tja, det finns en bra möjlighet att du kan!

För datavetenskapare som använder Python som sitt primära programmeringsspråk är Pandas-paketet ett måste-ha dataanalysverktyg. Pandas -paketet har allt en datavetenskapare behöver, och varje kurs lärde oss hur man använder det till en början. Det är så stort, kraftfullt och utför nästan varje tabellmanipulation du kan tänka dig. Denna bredd kan emellertid ibland vara en nackdel.

Den har många vackra funktioner som löser sällsynta kantfall, olika scenarier.

En av pandans viktigaste nackdelar är att den kämpar med stora datamängder eftersom pandor lagrar sina datastrukturer i RAM, vilket kan bli otillräckligt när datastorleken växer. Använd PySpark eller Dask för detta.

Även om Pandas -paketet används i stor utsträckning finns det fortfarande många funktioner som människor kan förbise, oavsett om det används mindre eller för att de inte är medvetna om dess existens. Det här inlägget har för avsikt att återinföra dig till dessa funktioner och visa att Pandor är mycket mer kompetenta än du tidigare visste.

Pipe

För att utföra datarengöring på ett kortfattat och kompakt sätt i pandor kan man använda rörfunktioner, som låter dig kombinera flera funktioner i en operation.

Till exempel, om du gillar att tillämpa funktioner som drop_duplicates, encod_categoricals, remove_outliers som accepterar dess argument.

df_cleaned = (diamonds.pipe (drop_duplicates). pipe (remove_outliers, ['price', 'carat', 'depth']). pipe (encod_categoricals, ['cut', 'color', 'clarity']))

Faktorisera

Denna funktion är ett alternativ till Sklearns Label Encoder.

# Tänk på [0] i slutet diamanter ["cut_enc"] = pd.factorize (diamants ["cut"]) [0] >>> diamanter ["cut_enc"]. Prov (5) 52103 2 39813 0 31843 0 10675 0 6634 0 Namn: cut_enc, dtype: int64

Faktorisera resultat en tuppel av värden: det kodade värdet och en lista med unika kategorier.

värden, unika = pd.factorize (diamanter ["cut"], sort = True) >>> värden [: 10] array ([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype = int64) >>> unik ['Ideal', 'Premium', 'Very Good', 'Good', 'Fair']

Explode

Explodera | pandor fungerar

Foto: Edewaa Foster on Unsplash

Explode är en funktion med ett intressant namn. Låt oss börja med ett exempel och sedan en förklaring:

df = pd.Series ([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]). to_frame ("smutsig") >>> df
data | pandor fungerar
Bild av författare

Funktionskolumnen har två rader markerade med listor. Denna typ av data är tillgänglig i undersökningar där några frågor accepterar flera val.

>>> df.explode ("smutsig", ignore_index = True)
data exploderar
Bild av författare

Denna funktion tar en cell med en rad värden och exploderar i flera rader. För att behålla ordningen av ett numeriskt index, använd ignorera_index som sant.

Mellan

För booleska indexering av numeriska funktioner inom ett intervall, här är en praktisk funktion:

# Få diamanter som är prissatta mellan 3500 och 3700 dollar diamanter [diamanter ["pris"]. Mellan (3500, 3700, inklusive = "varken")]. Prov (5)
mellan data | pandor fungerar
Bild av författare

 

T

DataFrame har ett enkelt T -attribut, kallat transponering. Vi kanske inte använder det ofta, beskriv metod är till hjälp när du tittar på dataramar.

>>> boston.describe (). T.head (10)
transponering
Bild av författare

 

Pandas Alternativ

Man kan använda globala inställningar för pandor som hjälper till att justera och ändra standardbeteenden.

>>> dir (pd.options) ['beräkna', 'display', 'io', 'läge', 'plotta']

Den består av 5 moduler. Låt oss se tillgängliga alternativ under displayen. Det finns många alternativ tillgängliga, men jag använder mest max_columns.

>>> dir (pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' , 'bredd']

De flesta använder max_kolumner och precision

# Ta bort gränsen för att visa antalet cols pd.options.display.max_columns = None # Visa bara 5 siffror efter decimalen pd.options.display.precision = 5 # blir av med vetenskaplig notation

Convert_dtypes

Vi är alla medvetna om att pandor har en irriterande vana att markera vissa kolumner som objektdatatyper. I stället för att definiera deras typer direkt kan du använda metoden convert dtypes, som försöker härleda den bästa datatypen:

sample = pd.read_csv ("data/station_day.csv", usecols = ["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes StationId object CO float64 O3 float64 AQI_Bucket object dtype: objekt >>> sample.convert_dtypes (). dtypes StationId string CO float64 O3 float64 AQI_Bucket string dtype: object

Select_dtypes

Från namnet tror jag att det är klart vad funktionen gör. Du kan använda inkluderings- och uteslutningsalternativen för att ange kolumner som innehåller eller utelämnar specifika datatyper.

Välj endast numeriska kolumner med nummer nummer, till exempel:

# Välj endast numeriska kolumner diamonds.select_dtypes (include = np.nummer) .head ()
välj dtyper
Bild av författare

 

Mask

Denna funktion hjälper till att ersätta värden där det anpassade villkoret inte uppfylls.

# Skapa provdata åldrar = pd.Series ([55, 52, 50, 66, 57, 59, 49, 60]). To_frame ("åldrar") åldrar
mask | data
Bild av författare

Efter att ha utfört ovanstående operation.

maskering utförd
Bild av författare

Min och Max

Även om min och max är välkända, har det några bättre egenskaper för vissa kantfall.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] libraries = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ({lib: np.random.uniform (90, 100, 5) för lib i bibliotek}, index = index) >>> df
min och max
Bild av författare 

Den fiktiva DataFrame ovan visar resultaten från fyra olika gradienthöjande bibliotek på fem datamängder. Vi letar efter det paket som gjorde bäst i varje datauppsättning. Så här uppnår du det med max på ett elegant sätt:

>>> df.max (axel = 1) Diamanter 99.52684 Titanic 99.63650 Iris 99.10989 Hjärtsjukdom 99.31627 Lån Standard 97.96728 dtyp: float64

Störst och minst

Det största och det minsta är till hjälp för att se de översta N- eller ~ (översta N) -värdena för en variabel.

diamonds.nlargest (5, "pris")
största och minsta
Bild av författare
diamonds.nsmallest (5, "pris")
minsta
Bild av författare

 

Idxmax och Idxmin

Pandor returnerar det största/minsta numret när du ringer max eller min på en kolumn. Det finns dock situationer när du behöver positionen för min/max, som dessa funktioner inte ger.

Istället kan du använda idxmax/idxmin:

>>> diamonds.price.idxmax () 27749 >>> diamonds.carat.idxmin () 14

Value_Counts

Ett vanligt sätt att hitta procentandelen av de saknade värdena är att kombinera isnull och summa och dividera med matrisens storlek.

Men value_counts med relevanta argument gör samma sak:

bostäder = pd.read_csv ("train.csv") >>> bostäder ["FireplaceQu"]. value_counts (dropna = False, normalize = True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 Namn: FireplaceQu, dtype: float64

Clip

Klippfunktionen hjälper till att hitta outliers utanför ett område och ersätta dem med hårda gränser.

>>> ages.clip (50, 60)
data för klipp
Bild av författare

 

At_time och Betweeen_time

Dessa funktioner är användbara när du arbetar med tidsserier med hög granularitet.

at_time hjälper till att få värden vid ett visst datum eller tidpunkt.

index = pd.date_range ("2021-08-01", perioder = 100, freq = "H") df = pd.DataFrame ({"col": list (intervall (100))}, index = index) >> > df.head ()
vid_tidsexempel | pandor fungerar
Bild av författare

>>> df.at_time (“15:00”)

.at_time | pandor fungerar
Bild av författare

mellan_tid används för att hämta rader inom ett anpassat intervall.

från datetime import datetime >>> df.between_time ("09:45", "12:00")
mellan_tid
Bild av författare

 

Bdate_range

Denna funktion hjälper till att skapa tidsserieindex med arbetsdagens frekvens. Finansvärlden har denna typ av frekvens. Så den här funktionen kan vara till hjälp vid tidpunkten för indexering av tidsserier med reindexfunktion.

serie = pd.bdate_range ("2021-01-01", "2021-01-31") # En period på en månad >>> len (serie) 21

På och Iat

Dessa två accessorer är väsentligt snabbare än loc och iloc. De har dock en nackdel. De låter dig bara välja eller ersätta ett värde i taget:

# [index, etikett] >>> diamonds.at [234, "cut"] 'Ideal' # [index, index] >>> diamonds.iat [1564, 4] 61.2 # Ersätt 16541: e raden i priskolumnen >> > diamonds.at [16541, "pris"] = 10000

Argsort

Denna funktion hjälper till att extrahera index som skulle sortera en rad funktioner.

tips.reset_index (inplace = True, drop = True) sort_idx = tips ["total_bill"]. argsort (kind = "mergesort") # Nu, sortera `tips` baserat på total_bill tips.iloc [sort_idx] .head ()
arg_sort
Bild av författare

 

Katttillbehör

Pandorna tillåter inbyggda funktioner för python på datum och strängar med hjälp av accessorer som str eller dt.

>>> diamonds.dtypes carat float64 cut kategori färgkategori klarhetskategori djup float64 tabell float64 pris int64 x float64 y float64 z float64 cut_enc int64 dtype: objekt

Man kan använda många specialfunktioner med hjälp av cat accessor på kategoriska kolumner. Den har funktioner som kategorier för att hitta unika, rename_categories för att byta namn på funktionerna.

diamants ["new_cuts"] = diamants ["cut"]. cat.rename_categories (list ("ABCDE")) >>> diamonds ["new_cuts"]. cat.categories Index (['A', 'B', ' C ',' D ',' E '], dtype =' objekt ')

Kolla in detta för en mer lista över funktioner under katttillbehör.

Squeeze

Squeeze är en funktion som används i sällsynta men försvårande kantomständigheter.

När ett enda värde returneras från ett villkor som används för att delsätta en DataFrame, är detta ett av dessa fall. Tänk på följande scenario:

delmängd = diamonds.loc [diamonds.index >> delmängd
pris

Även om det bara finns en cell, returnera DataFrame. Det är obekvämt eftersom du nu måste använda .loc med både kolumnnamn och index för att få priset.

Du behöver inte om du vet hur man klämmer. En axel kan tas bort från en enda cell DataFrame eller serie med denna funktion. Tänk på följande scenario:

>>> delmängd.squeeze () 326

Det är möjligt att ange vilken axel som ska tas bort. Det hade bara återvänt skalär nu.

>>> subset.squeeze ("kolumner") # eller "rader" 0 326 Namn: pris, dtype: int64

Observera att den här funktionen bara fungerar för serier eller DataFrame med enstaka värden.

Excel_writer

Det är en generisk klass för att skapa excel -filer och skriva DataFrame i den. Tänk på att vi har dessa två datamängder.

# Ladda två datamängder diamanter = sns.load_dataset ("diamanter") tips = sns.load_dataset ("tips") # Skriv till samma excel -fil med pd.ExcelWriter ("data/data.xlsx") som författare: diamonds.to_excel (författare, bladnamn = "diamanter") tips.to_excel (författare, bladnamn = "tips")

Den har egenskaper för att ange vilket DateTime -format som ska användas, oavsett om du behöver en ny fil eller ändra en befintlig, vad händer om ett ark finns. Kolla detta dokumentation för mer detaljer.

Slutsats

Det är inte en uttömmande översikt över pandor och dokumentation innehåller mer information om koden och funktioner. Jag rekommenderar att du experimenterar med olika varianter av kodavsnitten som tillhandahålls här, liksom olika parametrar. Man kan till fullo förstå kraften i pandor genom att göra detta.

Bibliotek som Dask och datatabell förskjuter gradvis Pandas med sina flashiga nya funktioner för hantering av stora datamängder, Pandas är fortfarande det mest använda datahanteringsverktyget i Python datavetenskapssamhälle. På grund av hur väl det passar in i den nuvarande SciPy -stacken, fungerar biblioteket som ett paradigm för andra paket att följa och bygga.

Jag hoppas att du hade funnit detta inlägg insiktsfullt och tack för att du läste.

Media som visas i denna artikel ägs inte av Analytics Vidhya och används efter författarens gottfinnande.

Källa: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

Tidsstämpel:

Mer från Analys Vidhya