Dit artikel is gepubliceerd als onderdeel van het Data Science-blogathon
Introductie
Nou, er is een goede mogelijkheid dat je dat kunt!
Voor datawetenschappers die Python als hun primaire programmeertaal gebruiken, is het Pandas-pakket een onmisbare tool voor data-analyse. Het Pandas-pakket heeft alles wat een datawetenschapper nodig heeft, en elke cursus leerde ons in eerste instantie hoe we het moesten gebruiken. Het is zo groot, krachtig en voert bijna elke tafelmanipulatie uit die je maar kunt bedenken. Deze breedte kan echter soms een nadeel zijn.
Het heeft veel mooie functies die zeldzame randgevallen, verschillende scenario's oplossen.
Een van de belangrijkste nadelen van panda's is dat het worstelt met grote datasets omdat panda's hun datastructuren in RAM opslaan, wat onvoldoende kan worden naarmate de data groter wordt. Gebruik hiervoor PySpark of Dask.
Hoewel het Pandas-pakket veel wordt gebruikt, zijn er nog steeds veel functies die mensen over het hoofd kunnen zien, hetzij omdat het minder wordt gebruikt of omdat ze niet op de hoogte zijn van het bestaan โโervan. Dit bericht is bedoeld om je opnieuw kennis te laten maken met die functies en aan te tonen dat Pandas veel competenter is dan je eerder wist.
Pijp
Om data opschonen op een beknopte, compacte manier in panda's uit te voeren, kan men Pipe-functies gebruiken, waarmee u meerdere functies in รฉรฉn handeling kunt combineren.
Als u bijvoorbeeld functies wilt toepassen zoals drop_duplicates, encode_categoricals, remove_outliers die de argumenten accepteren.
df_cleaned = (diamonds.pipe(drop_duplicates). pipe(remove_outliers, ['price', 'carat', 'depth']). pipe(encode_categoricals, ['cut', 'color', 'clarity']) )
Factoriseren
Deze functie is een alternatief voor Sklearns Label Encoder.
# Let op de [0] aan het einde diamanten["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamanten["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Naam: cut_enc, dtype: int64
Factorize resulteert in een tuple van waarden: de gecodeerde waarde en een lijst met unieke categorieรซn.
waarden, uniek = pd.factorize(diamanten["cut"], sort=True) >>> waarden[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2], dtype=int64) >>> uniek ['Ideaal', 'Premium', 'Zeer goed', 'Goed', 'Redelijk']
Exploderen
Foto door Edewa Foster on Unsplash
Explode is een functie met een interessante naam. Laten we beginnen met een voorbeeld en daarna een uitleg:
df = pd.Serie([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("vuil") >>> df
De kenmerkkolom heeft twee rijen die worden aangeduid met lijsten. Dit type gegevens is beschikbaar in enquรชtes waar een paar vragen meerdere keuzes accepteren.
>>> df.explode("vies", ignore_index=True)
Deze functie neemt een cel met een reeks waarden en explodeert in meerdere rijen. Om de volgorde van een numerieke index te behouden, gebruikt u ignore_index als True.
Tussen
Voor booleaanse indexering van numerieke functies binnen een bereik is hier een handige functie:
# Krijg diamanten die geprijsd zijn tussen 3500 en 3700 dollar diamanten[diamanten["prijs"].between(3500, 3700, inclusive="geen van beide")].sample(5)
T
DataFrame heeft een eenvoudig T-attribuut, bekend als transponeren. We gebruiken het misschien niet vaak, de methode beschrijven is handig tijdens het bekijken van de dataframes.
>>> boston.beschrijven().T.head(10)
Panda's opties
Men kan globale instellingen van panda's gebruiken die helpen bij het aanpassen en wijzigen van het standaardgedrag.
>>> dir(pd.opties) ['berekenen', 'weergeven', 'io', 'mode', 'plotten']
Het bestaat uit 5 modulen. Laten we de beschikbare opties onder het scherm bekijken. Er zijn veel opties beschikbaar, maar ik gebruik meestal max_columns.
>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode', 'width']
De meeste mensen gebruiken max_columns en precisie
# Verwijder de limiet om het aantal kolommen weer te geven pd.options.display.max_columns = Geen # Toon slechts 5 getallen achter de komma pd.options.display.precision = 5 # verwijdert de wetenschappelijke notatie
Converteren_dtypes
We zijn ons er allemaal van bewust dat panda's de vervelende gewoonte hebben om sommige kolommen als objectgegevenstypen te markeren. In plaats van hun typen rechtstreeks te definiรซren, kunt u de convert dtypes-methode gebruiken, die probeert het beste gegevenstype af te leiden:
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: object >>> sample.convert_dtypes().dtypes StationId string CO float64 O3 float64 AQI_Bucket string dtype: voorwerp
Selecteer_dtypes
Uit de naam blijkt volgens mij duidelijk wat de functie doet. U kunt de opties voor opnemen en uitsluiten gebruiken om kolommen op te geven die specifieke gegevenstypen bevatten of weglaten.
Kies alleen numerieke kolommen met np.number, bijvoorbeeld:
# Kies alleen numerieke kolommen diamonds.select_dtypes(include=np.number).head()
Masker
Deze functie helpt bij het vervangen van waarden waarbij niet aan de aangepaste voorwaarde wordt voldaan.
# Maak voorbeeldgegevens leeftijden = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("leeftijden") leeftijden
Na het uitvoeren van de bovenstaande bewerking.
Min en Max
Hoewel min en max bekend zijn, heeft het enkele betere eigenschappen voor sommige randgevallen.
index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] bibliotheken = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame( {lib: np.random.uniform(90, 100, 5) voor lib in bibliotheken}, index=index ) >>> df
Het fictieve DataFrame hierboven toont de resultaten van vier verschillende gradiรซntverhogende bibliotheken op vijf datasets. We zijn op zoek naar het pakket dat het beste presteerde op elke dataset. Hier leest u hoe u dit op een stijlvolle manier met max kunt bereiken:
>>> df.max(axis=1) Diamanten 99.52684 Titanic 99.63650 Iris 99.10989 Hartziekte 99.31627 Lening Wanbetaling 97.96728 dtype: float64
Grootste en kleinste
De ngrootste en nkleinste zijn handig om de hoogste N- of ~(top N)-waarden van een variabele te bekijken.
diamanten.nlargest(5, "prijs")
diamanten.nsmallest(5, "prijs")
Idxmax en Idxmin
Panda's retourneren het grootste/kleinste getal wanneer u max of min op een kolom roept. Er zijn echter situaties waarin u de positie van de min/max nodig heeft, die deze functies niet bieden.
In plaats daarvan kunt u idxmax/idxmin gebruiken:
>>> diamanten.prijs.idxmax() 27749 >>> diamanten.karaat.idxmin() 14
Waarde_tellingen
Een gebruikelijke manier om het percentage van de ontbrekende waarden te vinden, is door isnull en som te combineren en te delen door de grootte van de array.
Maar value_counts met relevante argumenten doet hetzelfde:
behuizing = pd.read_csv("train.csv") >>> behuizing["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 Naam: FireplaceQu, dtype: float64
Klem
De clipfunctie helpt om uitschieters buiten een bereik te vinden en deze te vervangen door harde limieten.
>>> leeftijden.clip(50, 60)
At_time en Between_time
Deze functies zijn handig bij het werken met tijdreeksen met een hoge granulariteit.
at_time helpt om waarden op een specifieke datum of tijd te krijgen.
index = pd.date_range("2021-08-01", perioden=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >>> df.head()
>>> df.at_time(โ15:00โ)
between_time gebruikt om rijen binnen een aangepast bereik op te halen.
from datetime import datetime >>> df.between_time("09:45", "12:00")
Bdate_bereik
Deze functie helpt bij het maken van tijdreeksindices met werkdagfrequentie. De financiรซle wereld heeft dit soort frequentie. Deze functie kan dus nuttig zijn bij het opnieuw indexeren van tijdreeksen met de functie herindexeren.
series = pd.bdate_range("2021-01-01", "2021-01-31") # Een periode van een maand >>> len(serie) 21
Bij en Iaat
Deze twee accessors zijn aanzienlijk sneller dan loc en iloc. Ze hebben echter een nadeel. U kunt slechts รฉรฉn waarde tegelijk kiezen of vervangen:
# [index, label] >>> diamanten.at[234, "cut"] 'Ideal' # [index, index] >>> diamanten.iat[1564, 4] 61.2 # Vervang 16541e rij van de prijskolom >>> diamanten.at[16541, "price"] = 10000
Argsort
Deze functie helpt bij het extraheren van indices die een reeks functies zouden sorteren.
tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # Sorteer nu `tips` op basis van total_bill tips.iloc[sort_idx].head()
Accessoire voor katten
De panda's maken ingebouwde functies van python op datums en strings mogelijk met behulp van accessors zoals str of dt.
>>> diamanten.dtypes karaat float64 slijpcategorie kleur categorie helderheid categorie diepte float64 tafel float64 prijs int64 x float64 y float64 z float64 cut_enc int64 dtype: object
Men kan veel speciale functies gebruiken met behulp van cat-accessor op categorische kolommen. Het heeft functies zoals categorieรซn om unieke te vinden, rename_categories om de kenmerken te hernoemen.
diamanten["new_cuts"] = diamanten["cut"].cat.rename_categories(list("ABCDE")) >>> diamanten["new_cuts"].cat.categories Index(['A', 'B', 'C', 'D', 'E'], dtype='object')
Bekijk dit voor een meer lijst met functies hieronder kat accessoire.
Persen
Squeeze is een functie die wordt gebruikt in zeldzame maar verzwarende omstandigheden.
Wanneer een enkele waarde wordt geretourneerd uit een voorwaarde die wordt gebruikt om een โโDataFrame te subsetten, is dit een van deze gevallen. Overweeg het volgende scenario:
subset = diamanten.loc[diamonds.index >> subset
Zelfs als er maar รฉรฉn cel is, retourneert u het DataFrame. Het is onhandig omdat u nu.loc moet gebruiken met zowel de kolomnaam als de index om de prijs te verkrijgen.
Dat hoeft niet als je weet hoe je moet knijpen. Met deze functie kan een as worden verwijderd uit een DataFrame of Series met รฉรฉn cel. Overweeg het volgende scenario:
>>> subset.squeeze() 326
Het is mogelijk om de te verwijderen as op te geven. Het was nu alleen scalair teruggekeerd.
>>> subset.squeeze("kolommen") # of "rijen" 0 326 Naam: prijs, dtype: int64
Merk op dat deze functie alleen werkt voor Series of DataFrame met enkele waarden.
Excel_schrijver
Het is een generieke klasse voor het maken van Excel-bestanden en het erin schrijven van DataFrame. Bedenk dat we deze twee datasets hebben.
# Laad twee datasets diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Schrijf naar hetzelfde Excel-bestand met pd.ExcelWriter("data/data.xlsx") als schrijver: diamonds.to_excel (writer, sheet_name="diamonds") tips.to_excel(writer, sheet_name="tips")
Het heeft eigenschappen om het te gebruiken DateTime-formaat te specificeren, of u nu een nieuw bestand nodig hebt of een bestaand bestand wijzigt, wat er gebeurt als er een blad bestaat. Check dit documentatie voor meer details.
Conclusie
Het is geen uitputtend overzicht van panda's, en de documentatie bevat meer informatie over de code en functies. Ik raad u aan te experimenteren met verschillende variaties van de codefragmenten die hier worden verstrekt, evenals verschillende parameters. Men kan de kracht van panda's volledig begrijpen door dit te doen.
Bibliotheken zoals Dask en datatable verdringen Panda's geleidelijk met hun flitsende nieuwe functies voor het verwerken van grote datasets. Panda's blijft de meest gebruikte tool voor gegevensmanipulatie in de Python-datawetenschapsgemeenschap. Vanwege hoe goed het in de huidige SciPy-stack past, dient de bibliotheek als een paradigma voor andere pakketten om te volgen en te bouwen.
Ik hoop dat je dit bericht verhelderend vond en bedankt voor het lezen.
De media die in dit artikel worden getoond, zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt.
Verwant
- "
- 100
- 7
- Alles
- analyse
- analytics
- argumenten
- dit artikel
- BEST
- het stimuleren
- Boston
- bouw
- Bellen
- gevallen
- verandering
- Schoonmaak
- code
- Kolom
- Gemeen
- gemeenschap
- Berekenen
- Wij creรซren
- gegevens
- gegevensanalyse
- data science
- data scientist
- Data
- DEED
- Ziekte
- dollar
- rand
- Excel
- experiment
- eerlijk
- Kenmerk
- Voordelen
- financieel
- Voornaam*
- volgen
- formaat
- functie
- Globaal
- goed
- Groeien
- Behandeling
- handig
- hier
- Hoge
- Hoe
- How To
- HTTPS
- index
- informatie
- IT
- sleutel
- taal
- Groot
- leren
- Bibliotheek
- Lijst
- lijsten
- laden
- lening
- machine learning
- Manipulatie
- maskeren
- Media
- Nieuwe mogelijkheden
- nummers
- Opties
- Overige
- paradigma
- Mensen
- pijp
- energie
- precisie
- Premium
- presenteren
- prijs
- Programming
- Python
- RAM
- reeks
- lezing
- Resultaten
- Wetenschap
- wetenschappers
- -Series
- Eenvoudig
- Maat
- So
- OPLOSSEN
- begin
- winkels
- niet de tijd of
- tips
- top
- unicode
- us
- waarde
- Bekijk
- WIE
- binnen
- Bedrijven
- wereld
- schrijver
- het schrijven van
- X