Python Pandas handledning: DataFrame, datumintervall och användning

⚡ Smart sammanfattning

Pandas är öppen källkod Python bibliotek för att manipulera tabelldata. Det tillhandahåller serie- och dataframe-strukturer, datumintervall, inspektionshjälpfunktioner och operationerna för att segmentera, släppa, sammanfoga, sortera och byta namn som demonstreras i den här genomgången.

  • 🔘 Byggd på NumPy: Pandas kräver NumPy, som tillhandahåller arrayerna bakom varje serie och dataframe.
  • ☑️ Två strukturer: Serier lagrar en märkt dimension; DataFrame lagrar rader och kolumner av blandade typer.
  • Datumintervall: pd.date_range() bygger ett index från ett startdatum, ett periodantal och en frekvens.
  • 🧪 Inspektera först: head(), tail() och describe() visar form, spridning och percentiler före någon analys.
  • 🛠️ Skär exakt: Hakparentesnamn väljer kolumner, loc väljer efter etikett och iloc väljer efter position.
  • ⚠️ Versionsnotering: Frekvensaliaset M är föråldrat från Pandas 2.2; nuvarande utgåvor förväntar sig ME.

Python Pandas-handledning: DataFrame, datumintervall och användning av Pandas

Vad finns pandor i? Python?

pandas är ett bibliotek med öppen källkod som låter dig utföra datamanipulation och analys i Python, som täcker både numeriska tabeller och tidsserier. Den ger ett enkelt sätt att skapa, manipulera och sortera data, och den är byggd ovanpå numpy, så NumPy måste finnas närvarande för att Pandas ska fungera.

Varför använda pandor?

Dataforskare använder sig av pandor i Python för följande fördelar:

  • Hanterar enkelt saknad data
  • Den använder serier för endimensionell data och DataFrame för flerdimensionell data.
  • Det ger ett effektivt sätt att dela upp data
  • Det ger ett flexibelt sätt att slå samman, sammanfoga eller omforma data
  • Den innehåller en kraftfull verktygslåda för tidsserier

Kort sagt, Pandas levererar kraftfulla, lättanvända datastrukturer plus möjligheterna att snabbt arbeta med dem, vilket är anledningen till att de flesta är förankrade. Python dataanalys arbete.

Hur man installerar pandor

Pandas levereras med Anaconda och de flesta hanterade anteckningsbokstjänster, så det är vanligtvis redan installerat. Om importen misslyckas lägger ett av kommandona nedan till det. Den inbyggda miljön Hur man installerar TensorFlow innehåller även pandor.

  • pip: pip install pandas
  • Anakonda: conda install -c anaconda pandas
  • Inuti en Jupyter Notebook cell:
import sys
!conda install --yes --prefix {sys.prefix} pandas

Vad är en Pandas DataFrame?

En Pandas DataFrame är en tvådimensionell märkt datastruktur vars kolumner kan innehålla olika typer. Det är standardsättet att lagra data i tabellformat: rader innehåller observationerna och kolumner namnger informationen. Till exempel, pris kan vara namnet på en kolumn och 2, 3, 4 kan vara prisvärdena.

Dataramar är välkända för statistiker och andra dataexperter. Bilden nedan visar den formen – ett märkt radindex längs sidan och namngivna kolumner överst.

Pandas DataFrame-layout med ett märkt radindex och namngivna kolumner

Vad är en serie?

En serie är en endimensionell datastruktur. Den kan innehålla alla datatyper, såsom heltal, flyttal eller sträng, och är användbar när du vill utföra en beräkning eller returnera en endimensionell array. En serie kan per definition inte ha flera kolumner; använd i så fall DataFrame-strukturen.

Pandas-seriens konstruktor tar följande parametrar:

  • Data: kan vara ett listavärde, ett ordboksvärde eller ett skalärt värde
pd.Series([1., 2., 3.])
0    1.0
1    2.0
2    3.0
dtype: float64

Du kan lägga till ett index med indexDen namnger raderna, och dess längd måste vara lika med kolumnens storlek.

pd.Series([1., 2., 3.], index=['a', 'b', 'c'])

Nedan skapar du en Pandas-serie med ett saknat värde på den tredje raden. Saknade värden i Python visas som NaNoch np.nan från NumPy skapar en artificiellt.

pd.Series([1,2,np.nan])

Produktion

0    1.0
1    2.0
2    NaN
dtype: float64

Skapa Pandas DataFrame

Du kan konvertera en NumPy-array till en DataFrame med pd.DataFrame()Det motsatta är också möjligt: ​​för att konvertera en DataFrame tillbaka till en array, använd np.array(), eller df.to_numpy(), vilket rekommenderas av aktuell Pandas-dokumentation.

## 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 fungerar lika bra som en inmatning till pd.DataFrame().

dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
Ålder Namn
0 30 John
1 40 Smith

Pandas räckviddsdata

Pandas har ett bekvämt API för att skapa ett datumintervall, vilket blir indexet för en tidsserie. Anropet har följande form:

pd.date_range(start, periods, freq):

  • Den första parametern är startdatumet
  • Den andra parametern är antalet perioder (valfritt om slutdatumet anges)
  • Den sista parametern är frekvensen: dag D, månad M och år Y
## Create date
# Days
dates_d = pd.date_range('20300101', periods=6, freq='D')
print('Day:', dates_d)

Produktion

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)

Produktion

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')

Versionsnotering: månadens alias M som användes ovan är föråldrad från Pandas 2.2 och borttagen i Pandas 3.0. På nuvarande utgåvor passera freq='ME' för månadsslutet; det resulterande indexet är identiskt.

Inspektera data

Du kan kontrollera huvudet eller svansen på en datauppsättning med head() or tail() anropade DataFrame, som Pandas-exemplet nedan visar.

Steg 1) Skapa en slumpmässig sekvens med NumPy. Sekvensen har 4 kolumner och 6 rader.

random = np.random.randn(6,4)

Steg 2) Sedan skapar du en DataFrame med hjälp av Pandas.

Använda dates_m som index, så varje rad får ett namn som motsvarar ett datum, och namnge de fyra kolumnerna med columns argument.

# Create data with date
df = pd.DataFrame(random,
                  index=dates_m,
                  columns=list('ABCD'))

Därför att np.random.randn() körs utan ett frö, kommer dina siffror att skilja sig från de som skrivs ut här. Ring np.random.seed(0) först om du vill reproducera en fast mängd.

Steg 3) Använda huvudfunktionen

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

Steg 4) Använda svansfunktionen

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

Steg 5) Ett utmärkt sätt att få en uppfattning om data är describe()Den rapporterar antal, medelvärde, std, min, max och percentiler för datamängden.

df.describe()
A B C D
räkna 6.000000 6.000000 6.000000 6.000000
betyda 0.002317 0.256928 -0.151896 0.467601
std 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

Dela data

Slicing hämtar en delmängd av rader eller kolumner från en DataFrame. Du kan använda kolumnnamnet för att t.ex.tract en kolumn, som Pandas-exemplet nedan visar.

## 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

För att markera flera kolumner behöver du en dubbel parentes, [[..,..]]Det första paret betyder att du vill välja kolumner; det andra paret anger vilka kolumner som ska returneras.

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 segmentera raderna med ett kolon. Koden nedan returnerar de tre första raderna.

### 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-landskapet loc Accessorn väljer kolumner efter namn. Som vanligt står värdet före kommatecknet för raderna och värdet efter det för kolumnerna, och hakparenteser behövs för att välja mer än en kolumn.

## 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 finns en annan metod för att välja flera rader och kolumner. iloc[] använder heltalspositioner istället för kolumnnamn, så koden nedan returnerar samma DataFrame som ovan.

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

Släpp en kolumn

Du kan släppa kolumner med df.drop(), skickar namnen 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

sammanlänkning

Du kan sammanfoga två DataFrames med pd.concat()Skapa först de två ramarna.

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])  

Sedan sammanfoga dem.

df_concat = pd.concat([df1,df2]) 
df_concat
Ålder namn
0 25 John
1 30 Smith
2 50 paul
3 26 Adam
4 11 Smith

Släpp dubbletter

När en datauppsättning innehåller duplicerad information, drop_duplicates() är ett enkelt sätt att utesluta upprepade rader. df_concat innehåller en dubblettobservation: Smith förekommer två gånger i name kolonn.

df_concat.drop_duplicates('name')
Ålder namn
0 25 John
1 30 Smith
2 50 paul
3 26 Adam

Sortera värden

Du kan sortera en ram med sort_values(). Anteckna det Age skapades som text här, så raderna sorteras i strängordning.

df_concat.sort_values('Age')
Ålder namn
4 11 Smith
0 25 John
3 26 Adam
1 30 Smith
2 50 paul

Byt namn på kolumner

Använda rename() för att byta namn på en kolumn i Pandas. I varje par är det första värdet det aktuella kolumnnamnet och det andra är det nya.

df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
Age_ppl Efternamn
0 25 John
1 30 Smith
2 50 paul
3 26 Adam
4 11 Smith

Snabbreferens för Pandas metoder

Den här tabellen mappar varje vanlig uppgift till Pandas-metoden som utför den.

uppgift Metod
importera data read_csv
skapa serier Serier
Skapa dataram DataFrame
Skapa datumintervall DATE_RANGE
returnera huvudet huvud
tillbaka svans svans
Beskriv beskriva
skiva med namn datanamn['kolumnnamn']
Skiva med hjälp av rader data_name[0:5]

Vanliga frågor

Ring upp pd.read_csv() med en stig eller URLLägg till namn för att märka kolumner, sep för en annan avgränsare och usecols för att bara behålla de kolumner du behöver.

isnull() flaggar dem, dropna() tar bort de berörda raderna eller kolumnerna och fillna() ersätter en konstant eller en statistik såsom kolumnens medelvärde. Saknade poster skrivs ut som NaN.

groupby() delar upp rader i grupper efter en nyckelkolumn, tillämpar en aggregering som count, sum eller mean på varje grupp och kombinerar sedan resultaten i en ny ram.

Bygg en boolesk mask och skriv den inom parenteser, till exempel df[df.Age == 30]. Kombinera masker med operatorerna ampersand och pipe, radbrytping varje jämförelse inom parentes.

pd.merge() matchar rader i en nyckelkolumn på samma sätt som en SQL join gör det, med hur det är satt till inner, left, right eller outer. concat() staplar ramar istället för matchande nycklar.

df.to_csv('out.csv', index=False) skriver en kommateckenfil och df.to_excel('out.xlsx') skriver ett kalkylblad. Dropping Indexet undviker en namnlös första kolumn vid nästa läsning.

AI-assistenter profilerar en ny ram, föreslår de beskrivnings-, grupperings- och plottanrop som är värda att köra, och flaggar kolumner med udda datatyper eller många nullvärden. Bekräfta varje förslag mot rådata.

Ja. GitHub Copilot kompletterar en vanlig kommentar i fungerande Pandas-kod i en Jupyter cell. RevVisa datatyperna och radantalet innan du litar på resultatet.

Sammanfatta detta inlägg med: