Python Pandas-zelfstudie: DataFrame, datumbereik en gebruik
โก Slimme samenvatting
Pandas is de open-source Python Deze bibliotheek is bedoeld voor het bewerken van tabelgegevens. Ze biedt de structuren Series en DataFrame, datumbereiken, inspectiehulpmiddelen en de bewerkingen slice, drop, concatenate, sort en rename die in deze handleiding worden gedemonstreerd.
Wat is Pandas in Python?
Pandas is een open-source bibliotheek waarmee je gegevens kunt manipuleren en analyseren in PythonHet is geschikt voor zowel numerieke tabellen als tijdreeksen. Het biedt een eenvoudige manier om gegevens te creรซren, te bewerken en te verwerken, en is gebouwd op basis van... NumPyNumPy moet dus aanwezig zijn wil Pandas kunnen werken.
Waarom Panda's gebruiken?
Datawetenschappers maken gebruik van Pandaโs in Python om de volgende voordelen:
- Kan gemakkelijk ontbrekende gegevens verwerken
- Het maakt gebruik van Series voor eendimensionale gegevens en DataFrame voor multidimensionale gegevens.
- Het biedt een efficiรซnte manier om de gegevens te segmenteren
- Het biedt een flexibele manier om de gegevens samen te voegen, samen te voegen of opnieuw vorm te geven
- Het bevat een krachtige toolkit voor tijdreeksanalyse.
Kortom, Pandas biedt krachtige, gebruiksvriendelijke datastructuren plus de mogelijkheid om er snel mee te werken, en daarom vormt het de basis van de meeste frameworks. Python gegevensanalyse werken.
Hoe Pandas te installeren
Pandas wordt meegeleverd met Anaconda en de meeste beheerde notebookservices, dus het is meestal al geรฏnstalleerd. Als het importeren mislukt, voegt een van de onderstaande commando's het toe. De ingebouwde omgeving in Hoe TensorFlow te installeren Bevat ook Pandas.
- Pip:
pip install pandas - anaconda:
conda install -c anaconda pandas - Binnen een Jupyter Notitieboek cel:
import sys !conda install --yes --prefix {sys.prefix} pandas
Wat is een Pandas-dataframe?
Een Pandas DataFrame is een tweedimensionale, gelabelde datastructuur waarvan de kolommen verschillende gegevenstypen kunnen bevatten. Het is de standaard manier om gegevens in tabelvorm op te slaan: rijen bevatten de waarnemingen en kolommen benoemen de informatie. Bijvoorbeeld: prijs kan de naam van een kolom zijn en 2, 3, 4 kunnen de prijswaarden zijn.
Dataframes zijn welbekend bij statistici en andere data-analisten. De onderstaande afbeelding laat die structuur zien: een rij-index met labels aan de zijkant en kolommen met namen bovenaan.
Wat is een serie?
Een Series is een eendimensionale datastructuur. Het kan elk gegevenstype bevatten, zoals gehele getallen, drijvende-kommagetallen of tekenreeksen, en is handig wanneer je een berekening wilt uitvoeren of een eendimensionale array wilt retourneren. Een Series kan per definitie geen meerdere kolommen hebben; gebruik daarvoor de DataFrame-structuur.
De Pandas Series-constructor accepteert de volgende parameters:
- Datum: kan een lijst, woordenboek of scalaire waarde zijn
pd.Series([1., 2., 3.])
0 1.0 1 2.0 2 3.0 dtype: float64
Je kunt een index toevoegen met indexHet geeft de rijen een naam en de lengte ervan moet gelijk zijn aan de breedte van de kolom.
pd.Series([1., 2., 3.], index=['a', 'b', 'c'])
Hieronder maak je een Pandas Series met een ontbrekende waarde in de derde rij. Ontbrekende waarden in Python worden weergegeven als NaNen np.nan NumPy creรซert er kunstmatig een.
pd.Series([1,2,np.nan])
uitgang
0 1.0 1 2.0 2 NaN dtype: float64
Maak Panda's DataFrame
Je kunt een NumPy-array omzetten naar een DataFrame met pd.DataFrame()Het omgekeerde is ook mogelijk: om een โโDataFrame terug te converteren naar een array, gebruik je np.array()of df.to_numpy(), wat de huidige Pandas-documentatie aanbeveelt.
## Numpy to pandas import numpy as np h = [[1,2],[3,4]] df_h = pd.DataFrame(h) print('Data Frame:', df_h) ## Pandas to numpy df_h_n = np.array(df_h) print('Numpy array:', df_h_n) Data Frame: 0 1 0 1 2 1 3 4 Numpy array: [[1 2] [3 4]]
Een woordenboek werkt net zo goed als invoer voor pd.DataFrame().
dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
| Leeftijd | Naam | |
|---|---|---|
| 0 | 30 | John |
| 1 | 40 | smid |
Gegevens over het bereik van panda's
Pandas heeft een handige API voor het creรซren van een datumbereik, dat vervolgens de index van een tijdreeks vormt. De aanroep ziet er als volgt uit:
pd.date_range(start, periods, freq):
- De eerste parameter is de startdatum
- De tweede parameter is het aantal perioden (optioneel als de einddatum is opgegeven)
- De laatste parameter is de frequentie: dag
D, maandMen jaarY
## Create date # Days dates_d = pd.date_range('20300101', periods=6, freq='D') print('Day:', dates_d)
uitgang
Day: DatetimeIndex(['2030-01-01', '2030-01-02', '2030-01-03', '2030-01-04', '2030-01-05', '2030-01-06'], dtype='datetime64[ns]', freq='D')
# Months dates_m = pd.date_range('20300101', periods=6, freq='M') print('Month:', dates_m)
uitgang
Month: DatetimeIndex(['2030-01-31', '2030-02-28', '2030-03-31', '2030-04-30','2030-05-31', '2030-06-30'], dtype='datetime64[ns]', freq='M')
Versie-opmerking: de maandalias M De hierboven gebruikte methode is verouderd sinds Pandas 2.2 en verwijderd in Pandas 3.0. In de huidige releases moet u de methode doorgeven. freq='ME' voor het einde van de maand; de resulterende index is identiek.
Gegevens inspecteren
Je kunt het begin of einde van een dataset controleren met head() or tail() aangeroepen op de DataFrame, zoals het onderstaande Pandas-voorbeeld laat zien.
Stap 1) Maak een willekeurige reeks met NumPy. De reeks heeft 4 kolommen en 6 rijen.
random = np.random.randn(6,4)
Stap 2) Vervolgens maak je een DataFrame aan met behulp van Pandas.
Gebruik dates_m als index, zodat elke rij een naam krijgt die overeenkomt met een datum, en de 4 kolommen worden benoemd met de columns argument.
# Create data with date df = pd.DataFrame(random, index=dates_m, columns=list('ABCD'))
Omdat np.random.randn() Als het zonder startpunt wordt uitgevoerd, zullen uw cijfers afwijken van de hier afgedrukte cijfers. Bel np.random.seed(0) Ten eerste, als je een vaste set wilt reproduceren.
Stap 3) De hoofdfunctie gebruiken
df.head(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | 1.139433 | 1.318510 | -0.181334 | 1.615822 |
| 2030-02-28 | -0.081995 | -0.063582 | 0.857751 | -0.527374 |
| 2030-03-31 | -0.519179 | 0.080984 | -1.454334 | 1.314947 |
Stap 4) De staartfunctie gebruiken
df.tail(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-04-30 | -0.685448 | -0.011736 | 0.622172 | 0.104993 |
| 2030-05-31 | -0.935888 | -0.731787 | -0.558729 | 0.768774 |
| 2030-06-30 | 1.096981 | 0.949180 | -0.196901 | -0.471556 |
Stap 5) Een uitstekende manier om inzicht te krijgen in de gegevens is describe()Het rapporteert het aantal, het gemiddelde, de standaardafwijking, het minimum, het maximum en de percentielen van de dataset.
df.describe()
| A | B | C | D | |
|---|---|---|---|---|
| tellen | 6.000000 | 6.000000 | 6.000000 | 6.000000 |
| gemiddelde | 0.002317 | 0.256928 | -0.151896 | 0.467601 |
| soa | 0.908145 | 0.746939 | 0.834664 | 0.908910 |
| Min | -0.935888 | -0.731787 | -1.454334 | -0.527374 |
| 25% | -0.643880 | -0.050621 | -0.468272 | -0.327419 |
| 50% | -0.300587 | 0.034624 | -0.189118 | 0.436883 |
| 75% | 0.802237 | 0.732131 | 0.421296 | 1.178404 |
| max | 1.139433 | 1.318510 | 0.857751 | 1.615822 |
Segmentgegevens
Met slicing wordt een subset van rijen of kolommen uit een DataFrame gehaald. Je kunt de kolomnaam gebruiken om bijvoorbeeld...tracin รฉรฉn kolom, zoals het onderstaande Pandas-voorbeeld laat zien.
## Slice ### Using name df['A'] 2030-01-31 -0.168655 2030-02-28 0.689585 2030-03-31 0.767534 2030-04-30 0.557299 2030-05-31 -1.547836 2030-06-30 0.511551 Freq: M, Name: A, dtype: float64
Om meerdere kolommen te selecteren, heb je dubbele haakjes nodig. [[..,..]]Het eerste paar geeft aan dat u kolommen wilt selecteren; het tweede paar geeft aan welke kolommen u wilt retourneren.
df[['A', 'B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
Je kunt de rijen filteren met een dubbele punt. De onderstaande code geeft de eerste drie rijen weer.
### using a slice for row
df[0:3]
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 | 0.572301 | -0.031827 |
| 2030-02-28 | 0.689585 | 0.998266 | 1.164690 | 0.475975 |
| 2030-03-31 | 0.767534 | -0.940617 | 0.227255 | -0.341532 |
De loc Met de accessor-functie worden kolommen op naam geselecteerd. Zoals gebruikelijk staat de waarde vรณรณr de komma voor de rijen en de waarde erna voor de kolommen. Haakjes zijn nodig om meer dan รฉรฉn kolom te selecteren.
## Multi col df.loc[:,['A','B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
Er is nog een andere methode om meerdere rijen en kolommen te selecteren. iloc[] De code gebruikt gehele getallen in plaats van kolomnamen, waardoor de onderstaande code dezelfde DataFrame retourneert als hierboven.
df.iloc[:, :2]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
Zet een kolom neer
Je kunt kolommen verwijderen met df.drop()waarbij de namen worden doorgegeven in de columns argument.
df.drop(columns=['A', 'C'])
| B | D | |
|---|---|---|
| 2030-01-31 | 0.587590 | -0.031827 |
| 2030-02-28 | 0.998266 | 0.475975 |
| 2030-03-31 | -0.940617 | -0.341532 |
| 2030-04-30 | 0.507350 | -0.296035 |
| 2030-05-31 | 1.276558 | 0.523017 |
| 2030-06-30 | 1.572085 | -0.594772 |
Aaneenschakeling
Je kunt twee DataFrames samenvoegen met pd.concat()Maak eerst de twee kaders aan.
import numpy as np df1 = pd.DataFrame({'name': ['John', 'Smith','Paul'], 'Age': ['25', '30', '50']}, index=[0, 1, 2]) df2 = pd.DataFrame({'name': ['Adam', 'Smith' ], 'Age': ['26', '11']}, index=[3, 4])
Voeg ze vervolgens samen.
df_concat = pd.concat([df1,df2]) df_concat
| Leeftijd | naam | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | smid |
| 2 | 50 | Paul |
| 3 | 26 | Adam |
| 4 | 11 | smid |
Laat duplicaten vallen
Wanneer een dataset dubbele informatie bevat, drop_duplicates() Dit is een eenvoudige manier om herhaalde rijen uit te sluiten. df_concat bevat een dubbele observatie: Smith komt twee keer voor in de name kolom.
df_concat.drop_duplicates('name')
| Leeftijd | naam | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | smid |
| 2 | 50 | Paul |
| 3 | 26 | Adam |
Waarden sorteren
Je kunt een frame sorteren met sort_values(). Merk op dat Age is hier als tekst aangemaakt, dus de rijen worden gesorteerd op tekenreeksvolgorde.
df_concat.sort_values('Age')
| Leeftijd | naam | |
|---|---|---|
| 4 | 11 | smid |
| 0 | 25 | John |
| 3 | 26 | Adam |
| 1 | 30 | smid |
| 2 | 50 | Paul |
Kolommen hernoemen
Gebruik rename() Om een โโkolom in Pandas te hernoemen. In elk paar is de eerste waarde de huidige kolomnaam en de tweede de nieuwe.
df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
| Leeftijd_ppl | Achternaam | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | smid |
| 2 | 50 | Paul |
| 3 | 26 | Adam |
| 4 | 11 | smid |
Pandas-methoden: snel naslagwerk
Deze tabel koppelt elke veelvoorkomende taak aan de Pandas-methode die deze uitvoert.
| Taak | Methode |
|---|---|
| data importeren | lees_csv |
| serie maken | -Series |
| Maak een dataframe | dataframe |
| Datumbereik maken | DATE_RANGE |
| kop terug | hoofd |
| staart terug | staart |
| Beschrijven | beschrijven |
| segmenteren met naam | gegevensnaam['kolomnaam'] |
| Snijd met behulp van rijen | gegevens_naam[0:5] |

