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.

  • ๐Ÿ”˜ Gebouwd op NumPy: Pandas vereist NumPy, dat de arrays levert die ten grondslag liggen aan elke Series en DataFrame.
  • โ˜‘๏ธ Twee structuren: Een Series slaat รฉรฉn gelabelde dimensie op; een DataFrame slaat rijen en kolommen van gemengde gegevenstypen op.
  • โœ… Datumbereiken: pd.date_range() bouwt een index op basis van een startdatum, een periodetelling en een frequentie.
  • ๐Ÿงช Controleer eerst: head(), tail() en describe() tonen de vorm, spreiding en percentielen vรณรณrdat er analyses worden uitgevoerd.
  • ๏ธ Nauwkeurig snijden: Met 'Bracket' worden kolommen geselecteerd, met 'loc' wordt geselecteerd op label en met 'iloc' op positie.
  • โš ๏ธ Versie-opmerking: De frequentiealias M is verouderd sinds Pandas 2.2; in de huidige releases wordt ME verwacht.

Python Pandas-zelfstudie: DataFrame, datumbereik en het gebruik van Pandas

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.

Pandas DataFrame-indeling met een gelabelde rij-index en benoemde kolommen

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, maand M en jaar Y
## 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]

Veelgestelde vragen

Bel pd.read_csv() met een pad of URLVoeg namen toe aan de kolomlabels, gebruik sep voor een ander scheidingsteken en usecols om alleen de kolommen te behouden die u nodig hebt.

isnull() markeert ze, dropna() verwijdert de betreffende rijen of kolommen en fillna() vervangt ze door een constante of een statistiek zoals het gemiddelde van de kolom. Ontbrekende waarden worden weergegeven als NaN.

De functie groupby() verdeelt rijen in groepen op basis van een sleutelkolom, past een aggregatie zoals telling, som of gemiddelde toe op elke groep en combineert vervolgens de resultaten in een nieuw frame.

Maak een booleaanse mask en plaats deze tussen haakjes, bijvoorbeeld df[df.Age == 30]. Combineer masks met de ampersand- en pipe-operatoren, en wrapper de mask.ping Elke vergelijking tussen haakjes.

pd.merge() koppelt rijen op basis van een sleutelkolom op dezelfde manier als een SQL `join` doet dat, met de instelling `how` op `inner`, `left`, `right` of `outer`. `concat()` stapelt frames in plaats van overeenkomende sleutels.

df.to_csv('out.csv', index=False) schrijft een csv-bestand, en df.to_excel('out.xlsx') schrijft een werkblad. (De rest van de tekst is mogelijk niet relevant voor de brontekst.)ping De index voorkomt dat er bij de volgende leesbewerking een naamloze eerste kolom wordt gebruikt.

AI-assistenten profileren een nieuw frame, stellen de beste beschrijvings-, groeperings- en plotfuncties voor en markeren kolommen met ongebruikelijke gegevenstypen of veel null-waarden. Controleer elke suggestie aan de hand van de ruwe data.

Ja. GitHub-copiloot maakt van een eenvoudige opmerking een werkende Pandas-code. Jupyter cel. RevControleer de gegevenstypen en het aantal rijen voordat u het resultaat vertrouwt.

Vat dit bericht samen met: