Python Pandas-opplæring: DataFrame, datointervall og bruk
⚡ Smart oppsummering
Pandas er åpen kildekode Python bibliotek for manipulering av tabelldata. Det leverer serie- og datarammestrukturer, datointervaller, inspeksjonshjelpere og operasjonene for å dele opp, slippe opp, sette sammen, sortere og gi nytt navn som demonstrert gjennom denne gjennomgangen.

Hva er pandaer i Python?
pandaer er et åpen kildekode-bibliotek som lar deg utføre datamanipulering og -analyse i Python, som dekker både numeriske tabeller og tidsserier. Den gir en enkel måte å opprette, manipulere og sortere data på, og den er bygget på toppen av nusset, så NumPy må være til stede for at Pandas skal fungere.
Hvorfor bruke pandaer?
Dataforskere bruker pandaer i Python for følgende fordeler:
- Håndterer enkelt manglende data
- Den bruker serier for endimensjonale data og DataFrame for flerdimensjonale data.
- Det gir en effektiv måte å dele dataene på
- Det gir en fleksibel måte å slå sammen, sette sammen eller omforme dataene
- Den inkluderer et kraftig verktøysett for tidsserier
Kort sagt, Pandas leverer kraftige, brukervennlige datastrukturer pluss midlene til å operere raskt med dem, og det er derfor de fleste er forankret. Python dataanalyse arbeide.
Slik installerer du Pandaer
Pandas leveres med Anaconda og de fleste administrerte notatboktjenester, så det er vanligvis allerede installert. Hvis importen mislykkes, legges det til av en av kommandoene nedenfor. Miljøet er innebygd. Hvordan installere TensorFlow inneholder også pandaer.
- pip:
pip install pandas - Anaconda:
conda install -c anaconda pandas - Inne i en Jupyter bærbare celle:
import sys !conda install --yes --prefix {sys.prefix} pandas
Hva er en Pandas DataFrame?
En Pandas DataFrame er en todimensjonal merket datastruktur der kolonnene kan inneholde forskjellige typer. Det er standardmåten å lagre data i tabellformat: rader inneholder observasjonene og kolonnene navngir informasjonen. For eksempel, pris kan være navnet på en kolonne og 2, 3, 4 kan være prisverdiene.
Datarammer er velkjente for statistikere og andre dataeksperter. Bildet nedenfor viser den formen – en merket radindeks langs siden og navngitte kolonner øverst.
Hva er en serie?
En serie er en endimensjonal datastruktur. Den kan inneholde alle datatyper, for eksempel heltall, flyttall eller streng, og er nyttig når du vil utføre en beregning eller returnere en endimensjonal matrise. En serie kan per definisjon ikke ha flere kolonner; bruk i så fall DataFrame-strukturen.
Pandas-seriens konstruktør tar følgende parametere:
- Dato: kan være en liste-, ordbok- eller skalarverdi
pd.Series([1., 2., 3.])
0 1.0 1 2.0 2 3.0 dtype: float64
Du kan legge til en indeks med indexDen navngir radene, og lengden må være lik størrelsen på kolonnen.
pd.Series([1., 2., 3.], index=['a', 'b', 'c'])
Nedenfor oppretter du en Pandas-serie med en manglende verdi i den tredje raden. Manglende verdier i Python vises som NaNog np.nan fra NumPy lager en kunstig.
pd.Series([1,2,np.nan])
Produksjon
0 1.0 1 2.0 2 NaN dtype: float64
Lag Pandas DataFrame
Du kan konvertere en NumPy-matrise til en DataFrame med pd.DataFrame()Det motsatte er også mulig: for å konvertere en DataFrame tilbake til en array, bruk np.array()eller df.to_numpy(), som anbefales av gjeldende Pandas-dokumentasjon.
## 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]]
En ordbok fungerer like bra som et innspill til pd.DataFrame().
dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
| Alder | Navn | |
|---|---|---|
| 0 | 30 | John |
| 1 | 40 | Smith |
Pandas rekkeviddedata
Pandas har et praktisk API for å opprette et datointervall, som blir indeksen for en tidsserie. Kallet har denne formen:
pd.date_range(start, periods, freq):
- Den første parameteren er startdatoen
- Den andre parameteren er antall perioder (valgfritt hvis sluttdatoen er spesifisert)
- Den siste parameteren er frekvensen: dag
D, månedMog årY
## Create date # Days dates_d = pd.date_range('20300101', periods=6, freq='D') print('Day:', dates_d)
Produksjon
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)
Produksjon
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')
Versjonsmerknad: månedens alias M brukt ovenfor er utdatert fra Pandas 2.2 og fjernet i Pandas 3.0. På nåværende utgivelser passerer freq='ME' for månedsslutt; den resulterende indeksen er identisk.
Inspiserer data
Du kan sjekke hodet eller halen til et datasett med head() or tail() kalte på DataFrame, som Pandas-eksemplet nedenfor viser.
Trinn 1) Lag en tilfeldig sekvens med NumPy. Sekvensen har 4 kolonner og 6 rader.
random = np.random.randn(6,4)
Trinn 2) Deretter oppretter du en DataFrame ved hjelp av Pandas.
Bruk dates_m som indeksen, slik at hver rad får et navn som tilsvarer en dato, og navngi de fire kolonnene med columns argument.
# Create data with date df = pd.DataFrame(random, index=dates_m, columns=list('ABCD'))
Fordi np.random.randn() går uten frø, vil tallene dine avvike fra de som er trykt her. Ring np.random.seed(0) først hvis du vil reprodusere et fast sett.
Trinn 3) Bruk av hodefunksjonen
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 |
Trinn 4) Bruk av halefunksjonen
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 |
Trinn 5) En utmerket måte å få en pekepinn på dataene på er describe()Den rapporterer antall, gjennomsnitt, std, min, maks og persentiler av datasettet.
df.describe()
| A | B | C | D | |
|---|---|---|---|---|
| telle | 6.000000 | 6.000000 | 6.000000 | 6.000000 |
| bety | 0.002317 | 0.256928 | -0.151896 | 0.467601 |
| std | 0.908145 | 0.746939 | 0.834664 | 0.908910 |
| minutter | -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 |
Del data
Slicing trekker et delsett av rader eller kolonner ut av en DataFrame. Du kan bruke kolonnenavnet til å f.eks.tract én kolonne, som Pandas-eksemplet nedenfor viser.
## 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
For å velge flere kolonner trenger du en dobbel parentes, [[..,..]]Det første paret betyr at du vil velge kolonner; det andre paret angir hvilke kolonner som skal returneres.
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 |
Du kan dele opp radene med et kolon. Koden nedenfor returnerer de tre første radene.
### 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 |
Ocuco loc aksessoren velger kolonner etter navn. Som vanlig står verdien før kommaet for radene og verdien etter det for kolonnene, og parenteser er nødvendige for å velge mer enn én kolonne.
## 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 |
Det finnes en annen metode for å velge flere rader og kolonner. iloc[] bruker heltallsposisjoner i stedet for kolonnenavn, så koden nedenfor returnerer samme DataFrame som ovenfor.
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 |
Slipp en kolonne
Du kan slippe kolonner med df.drop(), og videresender navnene i 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 |
sammenkjeding
Du kan sammenkoble to DataFrames med pd.concat()Lag først de to rammene.
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])
Koble dem deretter sammen.
df_concat = pd.concat([df1,df2]) df_concat
| Alder | navn | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | Smith |
| 2 | 50 | paul |
| 3 | 26 | Adam |
| 4 | 11 | Smith |
Drop duplikater
Når et datasett inneholder duplikatinformasjon, drop_duplicates() er en enkel måte å ekskludere de gjentatte radene på. df_concat inneholder en duplikatobservasjon: Smith vises to ganger i name kolonne.
df_concat.drop_duplicates('name')
| Alder | navn | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | Smith |
| 2 | 50 | paul |
| 3 | 26 | Adam |
Sorter verdier
Du kan sortere en ramme med sort_values(). Noter det Age ble opprettet som tekst her, så radene sorteres i strengrekkefølge.
df_concat.sort_values('Age')
| Alder | navn | |
|---|---|---|
| 4 | 11 | Smith |
| 0 | 25 | John |
| 3 | 26 | Adam |
| 1 | 30 | Smith |
| 2 | 50 | paul |
Gi nytt navn til kolonner
Bruk rename() for å gi nytt navn til en kolonne i Pandas. I hvert par er den første verdien det gjeldende kolonnenavnet, og den andre er det nye.
df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
| Age_ppl | Etternavn | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | Smith |
| 2 | 50 | paul |
| 3 | 26 | Adam |
| 4 | 11 | Smith |
Panda-metoder hurtigreferanse
Denne tabellen tilordner hver vanlige oppgave til Pandas-metoden som utfører den.
| Oppgave | Metode |
|---|---|
| importere data | les_csv |
| lage serier | Serien |
| Opprett dataramme | Dataramme |
| Opprett datoperiode | datointervall |
| returnere hodet | hode |
| tilbake hale | hale |
| Beskriv | beskrive |
| skive med navn | datanavn['kolonnenavn'] |
| Skjær opp ved hjelp av rader | data_name[0:5] |

