Ta članek je bil objavljen kot del Blogathon o znanosti o podatkih
Predstavitev
No, obstaja dobra možnost, da lahko!
Za podatkovne znanstvenike, ki uporabljajo Python kot svoj primarni programski jezik, je paket Pandas nujno orodje za analizo podatkov. Paket Pandas ima vse, kar potrebuje podatkovni znanstvenik, in vsak tečaj nas je najprej naučil, kako ga uporabljati. Je tako velik, močan in izvaja skoraj vse tabelarične manipulacije, ki si jih lahko zamislite. Vendar pa je ta širina včasih lahko slabost.
Ima veliko čudovitih funkcij, ki rešujejo redke robne primere, različne scenarije.
Ena od ključnih pomanjkljivosti pande je, da ima težave z velikimi nabori podatkov, ker panda shranjuje svoje podatkovne strukture v RAM, ki lahko postane nezadosten, ko se velikost podatkov poveča. Za to uporabite PySpark ali Dask.
Čeprav se paket Pandas pogosto uporablja, še vedno obstaja veliko funkcij, ki jih ljudje morda spregledajo, bodisi zato, ker se manj uporablja ali ker se ne zavedajo njegovega obstoja. Ta objava vas namerava ponovno seznaniti s temi funkcijami in pokazati, da je Pandas veliko bolj kompetenten, kot ste se prej zavedali.
cevi
Za izvedbo čiščenja podatkov na jedrnat in kompakten način v pandah lahko uporabite funkcije Pipe, ki vam omogočajo kombiniranje več funkcij v eni operaciji.
Na primer, če želite uporabiti funkcije, kot so drop_duplicates, encode_categoricals, remove_outliers, ki sprejemajo njegove argumente.
df_cleaned = (diamonds.pipe(drop_duplicates). pipe(remove_outliers, ['price', 'carat', 'depth']). pipe(encode_categoricals, ['cut', 'color', 'clarity']) )
Faktoriziraj
Ta funkcija je alternativa Sklearns Label Encoder.
# Upoštevajte [0] na koncu diamonds["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamonds["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Ime: cut_enc, dtype: int64
Faktorizacija rezultatov nabor vrednosti: kodirana vrednost in seznam edinstvenih kategorij.
vrednosti, edinstveno = pd.factorize(diamanti["cut"], sort=True) >>> values[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> edinstveno ['Idealno', 'Premium', 'Zelo dobro', 'Dobro', 'Pošteno']
Explode
Foto: Edewaa Foster on Unsplash
Explode je funkcija z zanimivim imenom. Začnimo s primerom in nato z razlago:
df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("dirty") >>> df
Stolpec funkcij ima dve vrstici, označeni s seznami. Ta vrsta podatkov je na voljo v anketah, kjer nekaj vprašanj omogoča več možnosti.
>>> df.explode("umazano", ignore_index=True)
Ta funkcija vzame celico z nizom vrednosti in razpade v več vrsticah. Če želite ohraniti vrstni red številskega indeksa, uporabite ignore_index kot True.
Med
Za številčne funkcije logičnega indeksiranja znotraj obsega je tukaj priročna funkcija:
# Pridobite diamante, katerih cena je med 3500 in 3700 dolarji diamonds[diamonds["price"].between(3500, 3700, inclusive="nither")].sample(5)
T
DataFrame ima preprost atribut T, znan kot transponiranje. Morda je ne uporabljamo pogosto, metoda opisa je v pomoč pri ogledovanju podatkovnih okvirov.
>>> boston.describe().T.head(10)
Možnosti Pandas
Uporabite lahko globalne nastavitve pand, ki pomagajo prilagoditi in spremeniti privzeto vedenje.
>>> dir(pd.options) ['compute', 'display', 'io', 'mode', 'plotting']
Sestavljen je iz 5 modulov. Oglejmo si razpoložljive možnosti pod zaslonom. Na voljo je veliko možnosti, vendar večinoma uporabljam max_columns.
>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' , 'premer']
Večina ljudi uporablja max_columns in natančnost
# Odstranite omejitev za prikaz števila stolpcev pd.options.display.max_columns = None # Prikažite le 5 števil za decimalko pd.options.display.precision = 5 # znebite se znanstvenega zapisa
Convert_dtypes
Vsi vemo, da imajo pande nadležno navado, da nekatere stolpce označujejo kot objektne podatkovne vrste. Namesto da neposredno definirate njihove tipe, lahko uporabite metodo convert dtypes, ki poskuša izpeljati najboljši podatkovni tip:
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: predmet >>> sample.convert_dtypes().dtypes StationId niz CO float64 O3 float64 AQI_Bucket niz dtype: object
Select_dtypes
Menim, da je iz imena jasno, kaj funkcija počne. Z možnostma vključitve in izključitve lahko določite stolpce, ki vključujejo ali izpuščajo določene vrste podatkov.
Izberite samo številske stolpce z np.number, na primer:
# Izberite samo številske stolpce diamonds.select_dtypes(include=np.number).head()
Maska
Ta funkcija pomaga zamenjati vrednosti, kjer pogoj po meri ni izpolnjen.
# Ustvarite vzorčne podatke starosti = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("age") starosti
Po izvedbi zgornje operacije.
Min in Max
Čeprav sta min in max dobro znana, ima nekaj boljših lastnosti za nekatere robne primere.
index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] knjižnice = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) za lib v knjižnicah}, index=index ) >>> df
Izmišljeni DataFrame zgoraj prikazuje rezultate štirih različnih knjižnic za povečanje gradienta na petih nizih podatkov. Iščemo paket, ki je bil najboljši pri vsakem naboru podatkov. Evo, kako to doseči z maxom na eleganten način:
>>> df.max(axis=1) Diamanti 99.52684 Titanik 99.63650 Iris 99.10989 Srčna bolezen 99.31627 Privzeto posojilo 97.96728 dtype: float64
Nnajvečji in Nnajmanjši
nlargest in nsmallest sta koristna za ogled zgornjih N ali ~(zgornjih N) vrednosti spremenljivke.
diamonds.nlargest(5, "price")
diamonds.nsmallest(5, "price")
Idxmax in Idxmin
Pande vrnejo največje/najmanjše število, ko kličete max ali min v stolpcu. Vendar obstajajo situacije, ko potrebujete položaj min/max, ki ga te funkcije ne zagotavljajo.
Namesto tega lahko uporabite idxmax/idxmin:
>>> diamonds.price.idxmax() 27749 >>> diamonds.carat.idxmin() 14
Štetje_vrednosti
Običajen način za iskanje odstotka manjkajočih vrednosti je kombinacija isnull in vsote ter deljenje z velikostjo matrike.
Toda value_counts z ustreznimi argumenti naredi isto:
ohišje = pd.read_csv("train.csv") >>> ohišje["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 Ime: FireplaceQu, dtype: float64
Posnetek
Funkcija izrezka pomaga najti izstopajoče vrednosti izven obsega in jih nadomestiti s trdimi mejami.
>>> ages.clip(50, 60)
At_time in Betweeen_time
Te funkcije so v pomoč pri delu s časovnimi serijami visoke razdrobljenosti.
at_time pomaga pridobiti vrednosti ob določenem datumu ali uri.
index = pd.date_range("2021-08-01", periods=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
>>> df.at_time(“15:00”)
med_časom, ki se uporablja za pridobivanje vrstic znotraj obsega po meri.
from datetime import datetime >>> df.between_time("09:45", "12:00")
Bdatum_obseg
Ta funkcija pomaga ustvariti indekse časovnih vrst s frekvenco delovnih dni. Finančni svet ima to vrsto frekvence. Torej je ta funkcija lahko v pomoč pri ponovnem indeksiranju časovnih vrst s funkcijo ponovnega indeksiranja.
serija = pd.bdate_range("2021-01-01", "2021-01-31") # Obdobje enega meseca >>> len(series) 21
Ob in Iat
Ta dva dostopnika sta bistveno hitrejša od loc in iloc. Vendar pa imajo pomanjkljivost. Omogočajo vam samo izbiro ali zamenjavo ene vrednosti naenkrat:
# [index, label] >>> diamonds.at[234, "cut"] 'Ideal' # [index, index] >>> diamonds.iat[1564, 4] 61.2 # Zamenjaj 16541. vrstico stolpca s cenami >> > diamonds.at[16541, "price"] = 10000
Argsort
Ta funkcija pomaga izluščiti indekse, ki bi razvrstili niz funkcij.
tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # Zdaj razvrstite `napitnine` glede na total_bill tips.iloc[sort_idx].head()
Cat Accessor
Pande omogočajo vgrajene funkcije pythona za datume in nize z uporabo dostopnikov, kot sta str ali dt.
>>> diamonds.dtypes karat float64 cut kategorija barva kategorija jasnost kategorija globina float64 tabela float64 cena int64 x float64 y float64 z float64 cut_enc int64 dtype: object
Uporabite lahko številne posebne funkcije z uporabo cat accessorja v kategoričnih stolpcih. Ima funkcije, kot so kategorije za iskanje edinstvenih, rename_categories za preimenovanje funkcij.
diamanti["new_cuts"] = diamanti["cut"].cat.rename_categories(list("ABCDE")) >>> diamanti["new_cuts"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='object')
Oglejte si to za več seznamov funkcij pod mačji pripomoček.
Stisnite
Stiskanje je funkcija, ki se uporablja v redkih, a oteževalnih robnih okoliščinah.
Ko se iz pogoja, uporabljenega za podnabor DataFrame, vrne ena sama vrednost, je to eden od teh primerov. Razmislite o naslednjem scenariju:
podmnožica = diamonds.loc[diamonds.index >> podmnožica
Tudi če obstaja samo ena celica, vrnite DataFrame. To je neprijetno, saj morate zdaj uporabiti.loc z imenom stolpca in indeksom, da dobite ceno.
Ni ti treba, če znaš stiskati. S to funkcijo je mogoče odstraniti os iz enoceličnega podatkovnega okvira ali serije. Razmislite o naslednjem scenariju:
>>> subset.squeeze() 326
Možno je določiti os, ki jo želite odstraniti. Zdaj je vrnil samo skalar.
>>> subset.squeeze("columns") # ali "rows" 0 326 Ime: cena, dtip: int64
Upoštevajte, da ta funkcija deluje samo za serije ali DataFrame z enojnimi vrednostmi.
Excel_writer
Je generični razred za ustvarjanje excelovih datotek in pisanje DataFrame vanje. Razmislite, imamo ta dva niza podatkov.
# Naloži dva nabora podatkov diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Pišite v isto datoteko excel s pd.ExcelWriter("data/data.xlsx") kot zapisovalcem: diamonds.to_excel (pisatelj, sheet_name="diamanti") tips.to_excel(pisatelj, sheet_name="namigi")
Ima lastnosti za določanje oblike zapisa datuma in časa, ali potrebujete novo datoteko ali spremenite obstoječo, kaj se zgodi, če list obstaja. Preveri to Dokumentacija Za več podrobnosti.
zaključek
To ni izčrpen pregled pand in Dokumentacija vsebuje več informacij o kodi in funkcijah. Priporočam, da preizkusite različne različice tukaj navedenih delčkov kode in različne parametre. S tem lahko v celoti dojamete moč pand.
Knjižnice, kot sta Dask in datatable, postopoma izpodrivajo Pande s svojimi bleščečimi novimi funkcijami za ravnanje z velikimi nabori podatkov, Pandas ostaja najpogosteje uporabljeno orodje za manipulacijo podatkov v skupnosti podatkovne znanosti Python. Zaradi tega, kako dobro se ujema s trenutnim skladom SciPy, knjižnica služi kot paradigma za druge pakete, ki jim sledijo in gradijo.
Upam, da se vam je ta objava zdela pronicljiva in hvala za branje.
Mediji, prikazani v tem članku, niso v lasti Analytics Vidhya in se uporabljajo po presoji avtorja.
Podobni
- "
- 100
- 7
- vsi
- Analiza
- analitika
- Argumenti
- članek
- BEST
- povečanje
- maribor
- izgradnjo
- klic
- primeri
- spremenite
- čiščenje
- Koda
- Stolpec
- Skupno
- skupnost
- Izračunajte
- Ustvarjanje
- datum
- Analiza podatkov
- znanost o podatkih
- podatkovni znanstvenik
- Termini
- DID
- bolezen
- dolarjev
- Edge
- Excel
- poskus
- sejem
- Feature
- Lastnosti
- finančna
- prva
- sledi
- format
- funkcija
- Globalno
- dobro
- Grow
- Ravnanje
- priročen
- tukaj
- visoka
- Kako
- Kako
- HTTPS
- Indeks
- Podatki
- IT
- Ključne
- jezik
- velika
- učenje
- Knjižnica
- Seznam
- seznami
- obremenitev
- posojila
- strojno učenje
- Manipulacija
- Maska
- mediji
- Nove funkcije
- številke
- možnosti
- Ostalo
- paradigma
- ljudje
- cevi
- moč
- Precision
- Premium
- predstaviti
- Cena
- Programiranje
- Python
- RAM
- območje
- reading
- Rezultati
- Znanost
- Znanstveniki
- Serija
- Enostavno
- Velikosti
- So
- SOLVE
- Začetek
- trgovine
- čas
- nasveti
- vrh
- unicode
- us
- vrednost
- Poglej
- WHO
- v
- deluje
- svet
- Pisatelj
- pisanje
- X