Michael Macaulay

Skal kende Pandas Funktioner til Machine Learning Journey

Kildeknude: 1865356

Denne artikel blev offentliggjort som en del af Data Science Blogathon

Introduktion

Nå, det er der en god mulighed for, at du kan!

For dataforskere, der bruger Python som deres primære programmeringssprog, er Pandas-pakken et must-have dataanalyseværktøj. Pandas-pakken har alt, hvad en dataforsker har brug for, og hvert kursus lærte os, hvordan man bruger det i starten. Den er så stor, kraftfuld og udfører næsten enhver tabelmanipulation, du kan forestille dig. Denne bredde kan dog til tider være en ulempe.

Det har mange smukke funktioner, der løser sjældne kantsager, forskellige scenarier.

En af pandaernes vigtigste ulemper er, at den kæmper med store datasæt, fordi pandaer gemmer deres datastrukturer i RAM, hvilket kan blive utilstrækkeligt, efterhånden som datastørrelserne vokser. Brug PySpark eller Dask til dette.

Selvom Pandas-pakken er meget udbredt, er der stadig mange funktioner, som folk kan overse, enten fordi den bruges mindre, eller fordi de ikke er klar over dens eksistens. Dette indlæg har til hensigt at genintroducere dig til disse funktioner og demonstrere, at Pandas er langt mere kompetent, end du tidligere var klar over.

Rør

For at udføre datarensning på en kortfattet, kompakt måde i pandaer, kan man bruge Pipe-funktioner, som giver dig mulighed for at kombinere flere funktioner i én operation.

For eksempel, hvis du kan lide at anvende funktioner såsom drop_duplicates, encode_categoricals, remove_outliers, der accepterer dets argumenter.

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

Faktoriser

Denne funktion er et alternativ til Sklearns Label Encoder.

# Pas på [0] i slutningen diamanter["cut_enc"] = pd.factorize(diamanter["cut"])[0] >>> diamanter["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Navn: cut_enc, dtype: int64

Faktoriser resultater en række værdier: den kodede værdi og en liste over unikke kategorier.

værdier, unik = pd.factorize(diamanter["cut"], sort=True) >>> værdier[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> unik ['Ideal', 'Premium', 'Meget god', 'God', 'Fair']

Explode

Eksplodere | pandas funktioner

Photo by Edewaa Foster on Unsplash

Explode er en funktion med et interessant navn. Lad os starte med et eksempel og derefter en forklaring:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("dirty") >>> df
data | pandas funktioner
Billede af forfatter

Funktionskolonnen har to rækker markeret med lister. Denne type data er tilgængelig i undersøgelser, hvor nogle få spørgsmål accepterer flere valg.

>>> df.explode("dirty", ignore_index=True)
data eksploderer
Billede af forfatter

Denne funktion tager en celle med en række værdier og eksploderer i flere rækker. For at opretholde rækkefølgen af ​​et numerisk indeks skal du bruge ignore_index som True.

Mellem

For boolesk indeksering af numeriske funktioner inden for et område, er her en praktisk funktion:

# Få diamanter, der er prissat mellem 3500 og 3700 dollars diamanter[diamanter["pris"].between(3500, 3700, inclusive="neither")].sample(5)
mellem data | pandas funktioner
Billede af forfatter

 

T

DataFrame har en simpel T-attribut, kendt som transponere. Vi bruger det muligvis ikke ofte, beskrive metode er nyttig, mens vi ser dataframes.

>>> boston.describe().T.head(10)
omsætte
Billede af forfatter

 

Pandas muligheder

Man kan bruge globale indstillinger af pandaer, der hjælper med at justere og ændre standardadfærden.

>>> dir(pd.options) ['compute', 'display', 'io', 'mode', 'plotting']

Den består af 5 moduler. Lad os se tilgængelige muligheder under displayet. Der er mange muligheder, men jeg bruger 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' , 'bredde']

De fleste bruger max_columns og præcision

# Fjern grænsen for at vise antallet af kolonner pd.options.display.max_columns = Ingen # Vis kun 5 tal efter decimalen pd.options.display.precision = 5 # fjerner videnskabelig notation

Konverter_dtyper

Vi er alle klar over, at pandaer har en irriterende vane med at markere nogle kolonner som objektdatatyper. I stedet for at definere deres typer direkte, kan du bruge convert dtypes-metoden, som forsøger at udlede den bedste datatype:

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

Vælg_dtypes

Ud fra navnet mener jeg, at det er tydeligt, hvad funktionen gør. Du kan bruge mulighederne for at inkludere og udelade til at angive kolonner, der inkluderer eller udelader specifikke datatyper.

Vælg kun numeriske kolonner med np.number, for eksempel:

# Vælg kun numeriske kolonner diamonds.select_dtypes(include=np.number).head()
vælg dtyper
Billede af forfatter

 

Maske

Denne funktion hjælper med at erstatte værdier, hvor den brugerdefinerede betingelse ikke er opfyldt.

# Opret eksempeldata aldre = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") aldre
maske | data
Billede af forfatter

Efter at have udført ovenstående operation.

maskering udført
Billede af forfatter

Min og Max

Selvom min og max er velkendte, har den nogle bedre egenskaber for nogle kantsager.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] biblioteker = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) for lib i biblioteker}, index=index ) >>> df
min og max
Billede af forfatter 

Den fiktive DataFrame ovenfor viser resultaterne af fire forskellige gradientforstærkende biblioteker på fem datasæt. Vi leder efter den pakke, der gjorde det bedst på hvert datasæt. Sådan opnår du det med max på en elegant måde:

>>> df.max(akse=1) Diamanter 99.52684 Titanic 99.63650 Iris 99.10989 Hjertesygdom 99.31627 Lån Default 97.96728 dtype: float64

Største og mindste

Den største og mindste er nyttig til at se de øverste N eller ~(top N) værdier for en variabel.

diamonds.nlargest(5, "pris")
største og mindste
Billede af forfatter
diamanter.nsmallest(5, "pris")
nmindste
Billede af forfatter

 

Idxmax og Idxmin

Pandaer returnerer det største/mindste tal, når du kalder max eller min på en kolonne. Der er dog situationer, hvor du har brug for positionen af ​​min/max, som disse funktioner ikke giver.

I stedet kan du bruge idxmax/idxmin:

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

Value_Counts

En almindelig måde at finde procentdelen af ​​de manglende værdier på er at kombinere isnull og sum og dividere med størrelsen af ​​matrixen.

Men værdi_tæller med relevante argumenter gør det samme:

bolig = pd.read_csv("train.csv") >>> bolig["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Eks 0.01644 Po 0.01370:Qu, 64:d flyde XNUMX

Clip

Clip-funktionen hjælper med at finde outliers uden for et interval og erstatte dem med hårde grænser.

>>> ages.clip(50, 60)
data til klip
Billede af forfatter

 

At_time og Betweeen_time

Disse funktioner er nyttige, når du arbejder med tidsserier med høj granularitet.

at_time hjælper med at få værdier på en bestemt dato eller tid.

index = pd.date_range("2021-08-01", periods=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
at_time eksempel | pandas funktioner
Billede af forfatter

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

.at_time | pandas funktioner
Billede af forfatter

between_time bruges til at hente rækker inden for et tilpasset interval.

fra datetime import datetime >>> df.between_time("09:45", "12:00")
mellem_tid
Billede af forfatter

 

Bdate_range

Denne funktion hjælper med at skabe tidsserieindeks med arbejdsdages frekvens. Den finansielle verden har denne type frekvens. Så denne funktion kan være nyttig på tidspunktet for genindeksering af tidsserier med genindekseringsfunktion.

series = pd.bdate_range("2021-01-01", "2021-01-31") # En periode på en måned >>> len(series) 21

Kl og Iat

Disse to tilbehør er væsentligt hurtigere end loc og iloc. De har dog en ulempe. De giver dig kun mulighed for at vælge eller erstatte én værdi ad gangen:

# [indeks, etiket] >>> diamonds.at[234, "cut"] 'Ideal' # [index, index] >>> diamonds.iat[1564, 4] 61.2 # Erstat 16541. række i priskolonnen >> > diamanter.at[16541, "pris"] = 10000

Argsort

Denne funktion hjælper med at udtrække indekser, der ville sortere en række funktioner.

tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # Sorter nu `tips` baseret på total_bill tips.iloc[sort_idx].head()
arg_sort
Billede af forfatter

 

Katte tilbehør

Pandaerne tillader indbyggede funktioner i python på datoer og strenge ved hjælp af tilbehør som str eller dt.

>>> diamonds.dtypes carat float64 cut kategori farve kategori klarhed kategori dybde float64 bord float64 pris int64 x float64 y float64 z float64 cut_enc int64 dtype: objekt

Man kan bruge mange specielle funktioner ved hjælp af kattetilbehør på kategoriske kolonner. Det har funktioner såsom kategorier til at finde unikke, rename_categories for at omdøbe funktionerne.

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

Tjek dette ud for en mere liste over funktioner under katte tilbehør.

Presse

Squeeze er en funktion, der bruges i sjældne, men alligevel skærpende kantforhold.

Når en enkelt værdi returneres fra en betingelse, der bruges til at undersætte en DataFrame, er dette et af disse tilfælde. Overvej følgende scenarie:

delmængde = diamanter.loc[diamanter.indeks >> delmængde
pris

Selvom der kun er én celle, skal du returnere DataFrame. Det er ubelejligt, da du nu skal bruge.loc med både kolonnenavn og indeks for at få prisen.

Det behøver du ikke, hvis du ved, hvordan man klemmer. En akse kan fjernes fra en enkeltcellet DataFrame eller serie ved hjælp af denne funktion. Overvej følgende scenarie:

>>> subset.squeeze() 326

Det er muligt at angive den akse, der skal fjernes. Det var først vendt tilbage skalar nu.

>>> subset.squeeze("kolonner") # eller "rows" 0 326 Navn: pris, dtype: int64

Bemærk, at denne funktion kun virker for Series eller DataFrame med enkelte værdier.

Excel_writer

Det er en generisk klasse til at oprette excel-filer og skrive DataFrame i den. Overvej, vi har disse to datasæt.

# Indlæs to datasæt diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Skriv til den samme excel-fil med pd.ExcelWriter("data/data.xlsx") som writer: diamonds.to_excel (writer, sheet_name="diamonds") tips.to_excel(writer, sheet_name="tips")

Det har egenskaber til at specificere DateTime-formatet, der skal bruges, uanset om du har brug for en ny fil eller ændre en eksisterende, hvad sker der, hvis der findes et ark. Tjek det her dokumentation for flere detaljer.

Konklusion

Det er ikke en udtømmende oversigt over pandaer, og de dokumentation indeholder flere oplysninger om koden og funktionerne. Jeg anbefaler, at du eksperimenterer med forskellige varianter af kodestykkerne, der er angivet her, samt forskellige parametre. Man kan fuldt ud forstå pandaernes kraft ved at gøre dette.

Biblioteker som Dask og datatable fortrænger gradvist Pandas med deres prangende nye funktioner til håndtering af store datasæt, Pandas er fortsat det mest udbredte datamanipulationsværktøj i Python data science-fællesskabet. På grund af hvor godt det passer ind i den nuværende SciPy-stack, fungerer biblioteket som et paradigme for andre pakker at følge og bygge.

Jeg håber du havde fundet dette indlæg indsigtsfuldt og tak fordi du læste med.

Medierne vist i denne artikel ejes ikke af Analytics Vidhya og bruges efter forfatterens skøn.

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

Tidsstempel:

Mere fra Analyse Vidhya