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.

  • 🔘 Bygget på NumPy: Pandas krever NumPy, som leverer arrayene bak hver serie og dataramme.
  • ☑️ To strukturer: Serier lagrer én merket dimensjon; DataFrame lagrer rader og kolonner av blandede typer.
  • Datoperioder: pd.date_range() bygger en indeks fra en startdato, et periodeantall og en frekvens.
  • 🧪 Inspiser først: `head(), tail()` og `describe()` avslører form, spredning og persentiler før noen analyse.
  • 🛠️ Skjær nøyaktig: Braketter velger kolonner, loc velger etter etikett og iloc velger etter posisjon.
  • ⚠️ Versjonsmerknad: Frekvensaliaset M er utdatert fra Pandas 2.2; nåværende utgivelser forventer ME.

Python Pandas-opplæring: DataFrame, datointervall og bruk av Pandas

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.

Pandas DataFrame-oppsett med en merket radindeks og navngitte kolonner

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åned M og år Y
## 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]

Spørsmål og svar

Anrop pd.read_csv() med en sti eller URLLegg til navn i etikettkolonner, bruk sep for et annet skilletegn og bruk kolonner for å bare beholde de kolonnene du trenger.

isnull() markerer dem, dropna() fjerner de berørte radene eller kolonnene, og fillna() erstatter en konstant eller en statistikk som for eksempel kolonnegjennomsnittet. Manglende oppføringer skrives ut som NaN.

groupby() deler rader inn i grupper etter en nøkkelkolonne, bruker en aggregering som antall, sum eller gjennomsnitt på hver gruppe, og kombinerer deretter resultatene i en ny ramme.

Lag en boolsk maske og send den i parenteser, for eksempel df[df.Age == 30]. Kombiner masker med ampersand- og pipe-operatorene, brytping hver sammenligning i parentes.

pd.merge() matcher rader i en nøkkelkolonne på samme måte som en SQL `join` gjør det, med hvordan satt til inner, left, right eller outer. `concat()` stabler rammer i stedet for matchende nøkler.

df.to_csv('out.csv', index=False) skriver en kommafil, og df.to_excel('out.xlsx') skriver et regneark. Droppping Indeksen unngår en navnløs første kolonne ved neste lesning.

AI-assistenter profilerer en ny ramme, foreslår beskrivelses-, grupperings- og plottekall som er verdt å kjøre, og flagger kolonner med odde datatyper eller mange nullverdier. Bekreft alle forslag mot rådataene.

Ja. GitHub Copilot fullfører en vanlig kommentar i fungerende Pandas-kode i en Jupyter celle. RevVis dtypene og radantallene før du stoler på resultatet.

Oppsummer dette innlegget med: