Hoppa till huvudinnehållet

Python pandas-handledning: Den ultimata guiden för nybörjare

Lär dig pandas från installation till analys, med varje exempel testat på pandas 3.1.
· 15 min läs

Utforska med AI

pandas är standardpaketet i Python för dataanalys, med mer än 500 miljoner nedladdningar i månaden på PyPI. Det läser och skriver CSV, Excel, JSON, SQL och många andra format, och dess funktioner täcker det dagliga arbetet med att rensa, omforma, aggregera och visualisera tabelldata.

I den här pandas-handledningen går vi igenom hela arbetsflödet på en verklig dataset: installera pandas, importera och exportera data, inspektera en DataFrame, välja och filtrera rader, rensa saknade värden och dubbletter, kombinera tabeller, aggregera och visualisera. Varje exempel körs på pandas 3.1, den aktuella versionen, och vi flaggar de ändringar i pandas 3 som bryter kod från äldre handledningar.

Du behöver grundläggande Python och ingen tidigare erfarenhet av pandas. För en längre inlärningsplan, se vårt inlägg om hur du lär dig pandas, och för interaktiv träning, vår kurs Data Manipulation with pandas.

TL;DR

  • pandas är Pythons standardbibliotek för att arbeta med tabelldata i DataFrames.
  • Installera med pip install pandas; pandas 3 kräver Python 3.11 eller nyare.
  • Kärnarbetsflödet är läsa, inspektera, välja, rensa, kombinera, aggregera, visualisera och exportera.
  • .loc[] väljer efter etikett, .iloc[] efter position.
  • Sedan pandas 3 uppdaterar kedjad tilldelning aldrig din data; använd ett enda anrop till .loc[].
  • Tilldela om resultat (df = df.dropna()) i stället för att använda det föråldrade inplace=True.

Vad är pandas?

pandas är ett paket i Python för hantering av tabelldata. Det vill säga data i form av rader och kolumner, även kallade DataFrames. Intuitivt kan du tänka på en DataFrame som ett Excel-ark. 

pandas funktionalitet omfattar datatransformationer, som att sortera rader och ta delmängder, att beräkna sammanfattande statistik såsom medelvärde, omforma DataFrames och slå ihop DataFrames. pandas fungerar väl med andra populära Python-paket för data science, ofta kallade PyData-ekosystemet, inklusive

Vad används pandas till?

pandas används genom hela arbetsflödet för dataanalys. Med pandas kan du:

  • Importera dataset från databaser, kalkylblad, CSV-filer och mer.
  • Rensa dataset, till exempel genom att hantera saknade värden.
  • Städa upp dataset genom att omforma deras struktur till ett lämpligt format för analys.
  • Aggregera data genom att beräkna sammanfattande statistik såsom medelvärden för kolumner, korrelationer mellan dem och mer.
  • Visualisera dataset och upptäcka insikter.

pandas innehåller också funktionalitet för tidsserieanalys och analys av textdata.

Viktiga fördelar med pandas

pandas har fem praktiska fördelar för vardagligt dataarbete:

  • Byggt för Python: Python är det mest populära språket för data science och maskininlärning, så pandas passar in i verktygen du redan använder.
  • Mindre kod per operation: Att filtrera, gruppera eller sammanfoga en tabell tar en rad i stället för en loop.
  • Läsbar vy av data: En DataFrame skrivs ut som en tabell med etiketter, så du kan se vad varje steg gjorde.
  • Brett funktionsutbud: Det täcker explorativ analys, saknade värden, sammanfattande statistik, omformning, tidsserier och visualisering.
  • Hanterar miljoner rader: pandas fungerar med miljoner rader och hundratals kolumner så länge datan får plats i minnet. För större data passar verktyg som Polars eller PySpark bättre.

Hur installerar man pandas

Innan du använder pandas behöver du installera det. Du kan hoppa över detta steg genom att registrera ett gratis DataCamp-konto och använda DataLab, en molnbaserad IDE som levereras med pandas (tillsammans med de främsta Python-paketen för data science) förinstallerat.

Installera pandas

Installera pandas med kommandot pip install i din terminal. pandas 3 kräver Python 3.11 eller nyare; på en äldre Python installerar pip den senaste 2.x-versionen av pandas som din Python stöder.

pip install pandas

Alternativt kan du installera det via conda:

conda install pandas

Efter att ha installerat pandas är det god praxis att kontrollera den installerade versionen för att säkerställa att allt fungerar korrekt:

import pandas as pd
print(pd.__version__)  # Prints the pandas version

Detta bekräftar att pandas är korrekt installerat och låter dig verifiera kompatibilitet med andra paket.

Vad ändrades i pandas 3.0 och 3.1

pandas 3.0, släppt i januari 2026, ändrade hur kopior, strängar och tilldelning fungerar, och pandas 3.1 (oktober 2026) avrådde från de flesta användningar av inplace=True. Kod från äldre handledningar körs mestadels fortfarande, men fyra ändringar ställer till det för många:

  • Copy-on-Write är standard. Varje delmängd eller metodresultat beter sig som en kopia, så att ändra det ändrar aldrig den ursprungliga DataFrame:en. SettingWithCopyWarning är borta, liksom behovet av defensiva .copy()-anrop.
  • Kedjad tilldelning fungerar inte längre. df["Age"][0] = 35 uppdaterar en temporär kopia och lämnar df oförändrad, och pandas varnar med ett ChainedAssignmentError. Använd ett enda anrop till .loc[] i stället.
  • Strängar har en egen datatyp. Textkolumner tolkas nu som str i stället för object, med PyArrow i bakgrunden när det är installerat.
  • inplace=True är föråldrat för sort_values(), reset_index(), dropna(), drop_duplicates(), rename() och flera andra metoder. Tilldela om resultatet i stället: df = df.dropna().

pandas 3 ändrade fyra standarder som bryter äldre handledningar

Här är ändringen med kedjad tilldelning på en liten DataFrame:

import pandas as pd

patients = pd.DataFrame({"name": ["Ana", "Ben", "Chloe"], "age": [34, 51, 28]})

patients["age"][0] = 35      # chained assignment: patients is not changed
patients.loc[0, "age"] = 35  # a single .loc[] call: patients is updated
print(patients.dtypes)
name      str
age     int64
dtype: object

Alla exempel i den här handledningen följer reglerna i pandas 3. För den fullständiga listan över ändringar, se de officiella versionsnoteringarna för pandas 3.0 och pandas 3.1. Om du underhåller äldre kod förklarar vår guide till SettingWithCopyWarning det beteende som Copy-on-Write ersatte.

Importera data i pandas

För att börja arbeta med pandas importerar du Python-paketet pandas som visas nedan. Vid import av pandas är den vanligaste aliasen för pandas pd.

import pandas as pd

Importera CSV-filer

Använd read_csv() med sökvägen till CSV-filen för att läsa en fil med kommaseparerade värden (se vår handledning om att importera data med read_csv() för mer detaljer).

df = pd.read_csv("diabetes.csv")

Denna läsning laddar CSV-filen diabetes.csv till en pandas DataFrame med namnet df. Genom hela den här handledningen använder vi Pima Indians Diabetes-datasetet: 768 patienter, åtta hälsomått som Glucose, BMI och Age, samt en Outcome-kolumn där 1 betyder att patienten diagnostiserades med diabetes.

Importera textfiler

Att läsa textfiler liknar CSV-filer. Den enda nyansen är att du behöver ange en avgränsare med argumentet sep, som visas nedan. Avgränsaren är tecknet som separerar värdena (kolumnerna) på varje rad. Komma (sep=","), tab (sep="\t"), kolon (sep=":") och blanktecken (sep=r"\s+") är de vanligaste. r"\s+" är ett reguljärt uttryck som matchar ett eller flera blanktecken; prefixet r gör det till en råsträng, så att Python inte behandlar \s som en ogiltig escape-sekvens.

df = pd.read_csv("diabetes.txt", sep=r"\s+")

Importera Excel-filer (ett blad)

Läs Excel-filer med funktionen read_excel(), med filsökvägen som indata. pandas behöver ett extra motorpaket för Excel: installera openpyxl för .xlsx-filer eller xlrd för äldre .xls-filer.

df = pd.read_excel('diabetes.xlsx')

Du kan också ange andra argument, såsom header för att ange vilken rad som blir DataFrame:ens rubrik. Standardvärdet är 0, vilket anger första raden som rubriker eller kolumnnamn. Du kan också ange kolumnnamn som en lista i argumentet names. Argumentet index_col (standard är None) kan användas om filen innehåller en radindex.

Obs: I en pandas DataFrame eller Series är indexet en identifierare som pekar på platsen för en rad eller kolumn i en pandas DataFrame. Kort sagt, indexet märker en DataFrames rad eller kolumn och låter dig komma åt en specifik rad eller kolumn genom att använda dess index (du kommer att se detta senare). En DataFrames radindex kan vara ett intervall (t.ex. 0 till 303), en tidsserie (datum eller tidsstämplar), en unik identifierare (t.ex. employee_ID i en employees-tabell) eller andra typer av data. För kolumner är det vanligtvis en sträng (som anger kolumnnamnet).

Importera Excel-filer (flera blad)

Att läsa Excel-filer med flera blad är inte så annorlunda. Du behöver bara ange ett ytterligare argument, sheet_name, där du antingen kan skicka en sträng för bladnamnet eller ett heltal för bladets position (notera att Python använder 0-indexering, där det första bladet kan nås med sheet_name = 0)

# Extracting the second sheet since Python uses 0-indexing
df = pd.read_excel('diabetes_multi.xlsx', sheet_name=1)

Importera JSON-fil

Liknande funktionen read_csv() kan du använda read_json() för JSON-filtyper med JSON-filnamnet som argument (för mer detaljer läs den här handledningen om att importera JSON- och HTML-data till pandas). Koden nedan läser en JSON-fil från disk och skapar ett DataFrame-objekt df.

df = pd.read_json("diabetes.json")

Om du vill lära dig mer om att importera data med pandas, kolla in detta fusklapp om att importera olika filtyper med Python. 

Importera data från SQL-databaser

För att läsa in data från en relationsdatabas, använd pd.read_sql() tillsammans med en databaskoppling.

import sqlite3

# Establish a connection to an SQLite database
conn = sqlite3.connect("my_database.db")

# Read data from a table
df = pd.read_sql("SELECT * FROM my_table", conn)

För andra databaser, såsom PostgreSQL eller MySQL, skicka en SQLAlchemy-motor som koppling i stället för en sqlite3-koppling. För stora tabeller, sätt argumentet chunksize för att läsa resultatet i omgångar.

Importera data från ett API (JSON-format)

Om din data kommer från ett webb-API kan pandas läsa det direkt med pd.read_json():

df = pd.read_json("https://api.example.com/data.json")

Om API-svaret är nästlad JSON, platta ut det med pd.json_normalize(), som gör om nästlade nycklar till punktseparerade kolumner:

records = [
    {"id": 1, "vitals": {"glucose": 148, "bmi": 33.6}},
    {"id": 2, "vitals": {"glucose": 85, "bmi": 26.6}},
]
pd.json_normalize(records)
   id  vitals.glucose  vitals.bmi
0   1             148        33.6
1   2              85        26.6

Exportera data i pandas

Precis som pandas kan importera data från olika filtyper kan det också exportera data till olika format. Detta sker särskilt när data har transformerats med pandas och behöver sparas lokalt på din dator. Nedan visas hur du skriver ut pandas DataFrames till olika format.

Skriva en DataFrame till en CSV-fil

En pandas DataFrame (här använder vi df) sparas som en CSV-fil med metoden .to_csv(). Skicka filsökvägen och sätt index=False om du inte behöver radindex i filen (standard, index=True, skriver det som en extra namnlös kolumn). Vår handledning om att spara en DataFrame till CSV täcker de andra argumenten.

df.to_csv("diabetes_out.csv", index=False)

Skriva en DataFrame till en JSON-fil

Exportera ett DataFrame-objekt till en JSON-fil genom att anropa metoden .to_json().

df.to_json("diabetes_out.json")

Obs: En JSON-fil lagrar ett tabelldataobjekt som en nyckel-värde-struktur. Därför kommer du att se upprepade kolumnhuvuden i en JSON-fil.

Skriva en DataFrame till en textfil

Precis som när du skriver DataFrames till CSV-filer kan du anropa .to_csv(). De enda skillnaderna är att utdatafilens format är .txt och att du behöver ange en avgränsare med argumentet sep.

df.to_csv('diabetes_out.txt', header=df.columns, index=None, sep=' ')

Skriva en DataFrame till en Excel-fil

Anropa .to_excel() på DataFrame:en för att spara den som en .xlsx-fil (detta kräver openpyxl). pandas kan inte längre skriva äldre .xls-filer.

df.to_excel("diabetes_out.xlsx", index=False)

Visa och förstå DataFrames i pandas

Efter att ha läst in tabelldata som en DataFrame behöver du få en inblick i datan. Du kan antingen visa ett litet urval av datasetet eller en sammanfattning i form av sammanfattande statistik.

Hur du visar data med .head() och .tail()

Du kan visa de första eller sista raderna i en DataFrame med metoderna .head() respektive .tail(). Du kan ange antalet rader via argumentet n (standardvärdet är 5).

df.head()

De första fem raderna i DataFrame:en (df) med .head()

De första fem raderna i DataFrame:en 

df.tail(n = 10)

Sista 10 raderna i DataFrame:en med .tail()

Sista 10 raderna i DataFrame:en

Förstå data med .describe()

Metoden .describe() skriver ut sammanfattande statistik för alla numeriska kolumner, såsom antal, medelvärde, standardavvikelse, spann och kvartiler för numeriska kolumner.

df.describe()

Hämta sammanfattande statistik med .describe()

Hämta sammanfattande statistik med .describe()

Det ger en snabb överblick över skala, skevhet och spann i numerisk data.

Du kan också ändra kvartilerna med argumentet percentiles. Här tittar vi till exempel på 30-, 50- och 70-percentilerna för de numeriska kolumnerna i DataFrame df.

df.describe(percentiles=[0.3, 0.5, 0.7])

Hämta sammanfattande statistik med specifika percentiler  pandas

Hämta sammanfattande statistik med specifika percentiler 

Du kan också isolera specifika datatyper i din sammanfattning med argumentet include. Här summerar vi till exempel bara kolumnerna med datatypen integer. 

df.describe(include=[int])

sammanfattande statistik för endast heltalskolumner i pandas

Hämta sammanfattande statistik för endast heltalskolumner 

På samma sätt kanske du vill utesluta vissa datatyper med argumentet exclude.

df.describe(exclude=[int])
              BMI  DiabetesPedigreeFunction
count  768.000000                768.000000
mean    31.992578                  0.471876
std      7.884160                  0.331329
min      0.000000                  0.078000
25%     27.300000                  0.243750
50%     32.000000                  0.372500
75%     36.600000                  0.626250
max     67.100000                  2.420000


Ofta tycker praktiker att det är enklare att visa sådan statistik genom att transponera den med attributet .T.

df.describe().T

Transponera sammanfattande statistik i pandas

Transponera sammanfattande statistik med .T


För mer om att beskriva DataFrames, kolla in följande fusklapp.

Förstå data med .info()

Metoden .info() är ett snabbt sätt att se datatyper, saknade värden och datamängd i en DataFrame. Här sätter vi argumentet show_counts till True, vilket visar antalet icke-saknade värden i varje kolumn. Vi sätter också memory_usage till True, vilket visar den totala minnesanvändningen för DataFrame-elementen. När verbose är satt till True skrivs hela sammanfattningen från .info() ut. 

df.info(show_counts=True, memory_usage=True, verbose=True)
<class 'pandas.DataFrame'>
RangeIndex: 768 entries, 0 to 767
Data columns (total 9 columns):
 #   Column                    Non-Null Count  Dtype  
---  ------                    --------------  -----  
 0   Pregnancies               768 non-null    int64  
 1   Glucose                   768 non-null    int64  
 2   BloodPressure             768 non-null    int64  
 3   SkinThickness             768 non-null    int64  
 4   Insulin                   768 non-null    int64  
 5   BMI                       768 non-null    float64
 6   DiabetesPedigreeFunction  768 non-null    float64
 7   Age                       768 non-null    int64  
  8   Outcome                   768 non-null    int64  
dtypes: float64(2), int64(7)
memory usage: 54.1 KB

Förstå dina data med .shape

Antalet rader och kolumner i en DataFrame kan identifieras med attributet .shape. Det returnerar en tuple (rad, kolumn) och kan indexeras för att få endast antal rader respektive endast antal kolumner som utdata.

df.shape # Get the number of rows and columns
df.shape[0] # Get the number of rows only
df.shape[1] # Get the number of columns only
(768,9)
768
9

Hämta alla kolumner och kolumnnamn

Att anropa attributet .columns på ett DataFrame-objekt returnerar kolumnnamnen i form av ett Index-objekt. Som en påminnelse är ett pandas-index adressen/etiketten för raden eller kolumnen.

df.columns
Index(['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI',
       'DiabetesPedigreeFunction', 'Age', 'Outcome'],
      dtype='str')

Det kan konverteras till en lista med funktionen list().

list(df.columns)
['Pregnancies',
 'Glucose',
 'BloodPressure',
 'SkinThickness',
 'Insulin',
 'BMI',
 'DiabetesPedigreeFunction',
 'Age',
 'Outcome']

Kontrollera saknade värden i pandas med .isnull()

Exempel-DataFramen har inga saknade värden. Låt oss lägga till några för att göra det mer intressant. Metoden .copy() skapar en kopia av den ursprungliga DataFramen. Att arbeta på en kopia håller den ursprungliga df intakt för de efterföljande exemplen. Med .loc (tas upp senare) kan du sätta raderna märkta 2 till 5 i kolumnen Pregnancies till saknade värden. Eftersom saknade värden lagras som NaN, ett flyttal, konverterar pandas kolumnen från int64 till float64.

df2 = df.copy()
df2.loc[2:5,'Pregnancies'] = None
df2.head(7)

Raderna 2 till 5 saknas i pandas

Du kan se att raderna 2 till 5 nu är NaN

Du kan kontrollera om varje element i en DataFrame saknas med metoden .isnull().

df2.isnull().head(7)

Eftersom det ofta är mer användbart att veta hur mycket saknad data du har kan du kombinera .isnull() med .sum() för att räkna antalet null-värden i varje kolumn.

df2.isnull().sum()
Pregnancies                 4
Glucose                     0
BloodPressure               0
SkinThickness               0
Insulin                     0
BMI                         0
DiabetesPedigreeFunction    0
Age                         0
Outcome                     0
dtype: int64

Du kan också göra en dubbel summa för att få det totala antalet null-värden i DataFramen.

df2.isnull().sum().sum()
4

Sortera, dela upp och extrahera data i pandas

Paketet pandas erbjuder flera sätt att sortera, delmängda, filtrera och isolera data i dina DataFrames. Här går vi igenom de vanligaste sätten.

Sortera data

För att sortera en DataFrame efter en specifik kolumn använder du .sort_values(). Den returnerar en ny, sorterad DataFrame och lämnar df oförändrad, så tilldela resultatet till en variabel om du vill behålla det:

df.sort_values(by="Age", ascending=False)  # Sort by Age in descending order

Du kan sortera efter flera kolumner:

df.sort_values(by=["Age", "Glucose"], ascending=[False, True])

Nollställa index

Sortering eller filtrering behåller de ursprungliga radetiketterna, så indexet hamnar i oordning. Använd .reset_index() för att få ett nytt index startande på 0 (se vår guide om att nollställa index i pandas för fler alternativ):

df_sorted = df.sort_values(by="Age", ascending=False).reset_index(drop=True)  # drop=True discards the old index
df_sorted[["Age", "Glucose", "Outcome"]].head(3)
   Age  Glucose  Outcome
0   81      134        0
1   72      119        0
2   70      145        1

Isolera en kolumn med [ ] 

Du kan isolera en enskild kolumn genom att använda en hakparentes [ ] med ett kolumnnamn i. Utdata är ett pandas-objekt av typen Series. En pandas Series är en endimensionell vektor som innehåller data av valfri typ, inklusive heltal, flyttal, strängar, booleska värden, Python-objekt etc. En DataFrame består av många serier som fungerar som kolumner.

df['Outcome']
0      1
1      0
2      1
3      0
4      1
      ..
763    0
764    0
765    0
766    1
767    0
Name: Outcome, Length: 768, dtype: int64

Isolera två eller fler kolumner med [[ ]] 

Du kan också ange en lista med kolumnnamn inuti hakparenteserna för att hämta fler än en kolumn. Här används hakparenteser på två olika sätt. Vi använder de yttre hakparenteserna för att ange en delmängd av en DataFrame, och de inre hakparenteserna för att skapa en lista.

df[['Pregnancies', 'Outcome']]
     Pregnancies  Outcome
0              6        1
1              1        0
2              8        1
3              1        0
4              0        1
..           ...      ...
763           10        0
764            2        0
765            5        0
766            1        1
767            1        0

[768 rows x 2 columns]

Isolera en rad med [ ] 

En enskild rad kan hämtas genom att skicka in en boolesk serie med ett True-värde. I exemplet nedan returneras den andra raden med index = 1. Här returnerar .index radetiketterna i DataFramen, och jämförelsen gör om det till en boolesk endimensionell vektor.

df[df.index==1]

Isolera en rad i pandas

Isolera en rad i pandas

Isolera två eller fler rader med [ ] 

På liknande sätt kan två eller fler rader returneras med metoden .isin() i stället för en ==-operator.

df[df.index.isin(range(2,10))]

Isolera specifika rader i pandas

Isolera specifika rader i pandas

Använda .loc[] och .iloc[] för att hämta rader

Du kan hämta specifika rader med etiketter eller villkor med .loc[] och .iloc[] ("location" och "integer location"). .loc[] använder en etikett för att peka ut en rad, kolumn eller cell, medan .iloc[] använder den numeriska positionen. Vår guide om loc vs iloc täcker alla skillnader; för att se den viktigaste här ändrar vi indexet för df2 som skapades tidigare så att etiketter och positioner inte längre matchar.

.loc[] väljer via etikett, .iloc[] via position

df2.index = range(1,769)

Exemplet nedan returnerar en pandas Series i stället för en DataFrame. I .loc[1] är 1 en etikett, så den returnerar raden med etikett 1 (den första raden efter ominidexering). I .iloc[1] är 1 en nollbaserad position, så den returnerar den andra raden, som har etiketten 2.

df2.loc[1]
Pregnancies                   6.000
Glucose                     148.000
BloodPressure                72.000
SkinThickness                35.000
Insulin                       0.000
BMI                          33.600
DiabetesPedigreeFunction      0.627
Age                          50.000
Outcome                       1.000
Name: 1, dtype: float64
df2.iloc[1]
Pregnancies                  1.000
Glucose                     85.000
BloodPressure               66.000
SkinThickness               29.000
Insulin                      0.000
BMI                         26.600
DiabetesPedigreeFunction     0.351
Age                         31.000
Outcome                      0.000
Name: 2, dtype: float64

Du kan också hämta flera rader genom att ange ett intervall i hakparenteser. De två åtkomstsätten behandlar slutet av intervallet olika: .loc[100:110] inkluderar etikett 110 och returnerar 11 rader, medan .iloc[100:110] stoppar före position 110 och returnerar 10 rader.

df2.loc[100:110]

Isolera rader med loc

Isolera rader i pandas med .loc[]

df2.iloc[100:110]

Isolera rader i pandas med .loc[]

Isolera rader i pandas med .iloc[]

Du kan också göra delmängder med .loc[] och .iloc[] genom att använda en lista i stället för ett intervall.

df2.loc[[100, 200, 300]]

Isolera rader med en lista i pandas med .loc[]

Isolera rader med en lista i pandas med .loc[]

df2.iloc[[100, 200, 300]]

Rader på positionerna 100, 200 och 300 valda med .iloc[]

Isolera rader med en lista i pandas med .iloc[]

Du kan också välja specifika kolumner tillsammans med rader. Det är här .iloc[] skiljer sig från .loc[] – den kräver kolumnposition och inte kolumnetiketter.

df2.loc[100:110, ['Pregnancies', 'Glucose', 'BloodPressure']]
     Pregnancies  Glucose  BloodPressure
100          1.0      122             90
101          1.0      163             72
102          1.0      151             60
103          0.0      125             96
104          1.0       81             72
105          2.0       85             65
106          1.0      126             56
107          1.0       96            122
108          4.0      144             58
109          3.0       83             58
110          0.0       95             85
df2.iloc[100:110, :3]
     Pregnancies  Glucose  BloodPressure
101          1.0      163             72
102          1.0      151             60
103          0.0      125             96
104          1.0       81             72
105          2.0       85             65
106          1.0      126             56
107          1.0       96            122
108          4.0      144             58
109          3.0       83             58
110          0.0       95             85

För snabbare arbetsflöden kan du skicka in startradsindex som ett intervall.

df2.loc[760:, ['Pregnancies', 'Glucose', 'BloodPressure']]
     Pregnancies  Glucose  BloodPressure
760          6.0      190             92
761          2.0       88             58
762          9.0      170             74
763          9.0       89             62
764         10.0      101             76
765          2.0      122             70
766          5.0      121             72
767          1.0      126             60
768          1.0       93             70
df2.iloc[760:, :3]
     Pregnancies  Glucose  BloodPressure
761          2.0       88             58
762          9.0      170             74
763          9.0       89             62
764         10.0      101             76
765          2.0      122             70
766          5.0      121             72
767          1.0      126             60
768          1.0       93             70

Du kan uppdatera värden genom att kombinera .loc[] med tilldelningsoperatorn =. Bygg villkoret från samma DataFrame som du uppdaterar: ett villkor byggt från df stämmer inte längre överens med det nya indexet i df2, och pandas kastar ett fel.

df2.loc[df2["Age"] == 81, "Age"] = 80

Filtrera rader med villkor

pandas låter dig filtrera data med villkor över rad-/kolumnvärden. Till exempel väljer koden nedan raden där Blood Pressure är exakt 122. Här isolerar vi rader med hakparenteser [ ] som i tidigare avsnitt. Men i stället för att mata in radindex eller kolumnnamn matar vi in ett villkor där kolumnen BloodPressure är lika med 122. Vi uttrycker detta villkor med df.BloodPressure == 122.

df[df.BloodPressure == 122]

Isolera rader baserat på ett villkor i pandas

Isolera rader baserat på ett villkor i pandas 

Exemplet nedan hämtar alla rader där Outcome är 1. Här väljer df.Outcome den kolumnen, df.Outcome == 1 returnerar en serie med booleska värden som avgör vilka Outcome som är lika med 1, och sedan tar [] en delmängd av df där den booleska serien är True.

df[df.Outcome == 1]

Isolera rader baserat på ett villkor i pandas

Isolera rader baserat på ett villkor i pandas 

Du kan använda operatorn > för att göra jämförelser. Koden nedan hämtar Pregnancies, Glucose och BloodPressure för alla poster med BloodPressure större än 100.

df.loc[df['BloodPressure'] > 100, ['Pregnancies', 'Glucose', 'BloodPressure']]
     Pregnancies  Glucose  BloodPressure
43             9      171            110
84             5      137            108
106            1       96            122
177            0      129            110
207            5      162            104
362            5      103            108
369            1      133            102
440            0      189            104
549            4      189            110
658           11      127            106
662            8      167            106
672           10       68            106
691           13      158            114

Rensa data i pandas

Datastädning är en av de vanligaste uppgifterna inom data science. pandas låter dig förbehandla data för alla syften, inklusive men inte begränsat till att träna maskininlärnings- och djupinlärningsmodeller. Låt oss använda DataFramen df2 från tidigare, som har fyra saknade värden, för att illustrera några exempel på datarensning. Som en påminnelse, så här kan du se hur många saknade värden som finns i en DataFrame.

df2.isnull().sum()
Pregnancies                 4
Glucose                     0
BloodPressure               0
SkinThickness               0
Insulin                     0
BMI                         0
DiabetesPedigreeFunction    0
Age                         0
Outcome                     0
dtype: int64

Hantering av saknade data teknik #1: Ta bort saknade värden

Ett sätt att hantera saknade data är att ta bort dem. Detta är särskilt användbart när du har gott om data och att förlora en liten del inte påverkar den efterföljande analysen. Du kan använda metoden .dropna() som visas nedan. Här sparar vi resultaten från .dropna() i en DataFrame df3.

df3 = df2.copy()
df3 = df3.dropna()
df3.shape
(764, 9) # this is 4 rows less than df2

Argumentet axis låter dig ange om du tar bort rader eller kolumner med saknade värden. Standardvärdet för axis tar bort rader som innehåller NaN. Använd axis = 1 för att ta bort kolumner med ett eller flera NaN-värden. Som i varje exempel i denna handledning återtilldelar vi resultatet i stället för att skicka inplace=True, vilket pandas 3.1 avråder från för .dropna().

df3 = df2.dropna(axis=1)
list(df3.columns)
['Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome']

Som standard tar .dropna() bort en rad om något av dess värden saknas. Sätt argumentet how till 'all' för att bara ta bort rader där alla värden saknas. Ingen rad i df2 är helt tom, så inget tas bort:

df3 = df2.dropna(how="all")
df3.shape
(768, 9)

Hantering av saknade data teknik #2: Ersätta saknade värden

I stället för att ta bort saknade värden kan du ersätta dem med en sammanfattande statistik eller ett fast värde. Om till exempel en dag saknas från en veckas temperaturmätningar, bevarar du raden och förlorar lite information genom att fylla den med veckans medelvärde. Koden nedan fyller de saknade Pregnancies-värdena med den kolumnens medelvärde.

df3 = df2.copy()
# Get the mean of Pregnancies
mean_value = df3["Pregnancies"].mean()
# Fill only that column's missing values
df3["Pregnancies"] = df3["Pregnancies"].fillna(mean_value)
df3["Pregnancies"].head(7)
1    6.000000
2    1.000000
3    3.846859
4    3.846859
5    3.846859
6    3.846859
7    3.000000
Name: Pregnancies, dtype: float64

Hantering av dubblettdata

Låt oss lägga till några dubbletter i de ursprungliga data för att lära oss hur man tar bort dubbletter i en DataFrame. Här använder vi funktionen pd.concat() för att slå samman raderna i DataFramen df2 med DataFramen df2, vilket lägger till perfekta dubbletter av varje rad i df2. 

df3 = pd.concat([df2, df2])
df3.shape
(1536, 9)

Du kan ta bort alla dubblettrader (standard) från DataFramen med metoden .drop_duplicates().

df3 = df3.drop_duplicates()
df3.shape
(768, 9)

Byta namn på kolumner

En vanlig datastädningsuppgift är att byta namn på kolumner. Skicka metoden .rename() ett columns-lexikon som mappar gamla namn till nya:

df3 = df3.rename(columns={"DiabetesPedigreeFunction": "DPF"})
df3[["Glucose", "BMI", "DPF", "Age"]].head()
   Glucose   BMI    DPF  Age
1      148  33.6  0.627   50
2       85  26.6  0.351   31
3      183  23.3  0.672   32
4       89  28.1  0.167   21
5      137  43.1  2.288   33

Du kan också tilldela en fullständig lista med namn till .columns. Listan måste namnge varje kolumn i dess nuvarande ordning: pandas tilldelar namn efter position, så en lista i fel ordning märker dina data fel utan varning.

df3.columns = ["Pregnancies", "Glucose", "BloodPressure", "SkinThickness", "Insulin", "BMI", "DPF", "Age", "Outcome"]
list(df3.columns)
['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'DPF', 'Age', 'Outcome']

För mer om datastädning, och för enklare och mer förutsägbara arbetsflöden för datastädning, kolla in följande checklista, som ger dig en heltäckande uppsättning vanliga datastädningsuppgifter. 

Kombinera DataFrames i pandas

pandas kombinerar DataFrames på två sätt: .merge() sammanfogar tabeller på delade nyckelkolumner, likt en SQL-join, och pd.concat() staplar tabeller ovanpå eller bredvid varandra.

Slå samman DataFrames med .merge()

Använd .merge() när två tabeller delar en nyckelkolumn. Anta att en andra tabell mappar varje Outcome-kod till en läsbar etikett. En vänsterjoin på Outcome lägger till den etiketten till varje patientrad:

outcome_labels = pd.DataFrame({"Outcome": [0, 1], "Diagnosis": ["Non-diabetic", "Diabetic"]})

df_labeled = df.merge(outcome_labels, on="Outcome", how="left")
df_labeled[["Glucose", "Outcome", "Diagnosis"]].head(3)
   Glucose  Outcome     Diagnosis
0      148        1      Diabetic
1       85        0  Non-diabetic
2      183        1      Diabetic

Argumentet how anger jointyp: "left" behåller varje rad i df, "inner" behåller bara rader med en matchning i båda tabellerna och "outer" behåller alla rader från båda. Vår handledning om att sammanfoga DataFrames i pandas täcker .join() och alla jointyper i detalj.

Konkatensera DataFrames med pd.concat()

Använd pd.concat() när tabeller har samma kolumner och du vill stapla deras rader, till exempel patientjournaler som anländer i två omgångar. Sätt ignore_index=True för att få ett nytt index från 0 i stället för att behålla varje omgångs etiketter:

batch_1 = df.iloc[:500]
batch_2 = df.iloc[500:]

df_combined = pd.concat([batch_1, batch_2], ignore_index=True)
df_combined.shape
(768, 9)

Med axis=1 placerar pd.concat() tabeller sida vid sida i stället, och matchar rader efter deras indexetiketter:

measurements = df[["Glucose", "BMI"]]
outcomes = df[["Outcome"]]

pd.concat([measurements, outcomes], axis=1).head(3)
   Glucose   BMI  Outcome
0      148  33.6        1
1       85  26.6        0
2      183  23.3        1

För praktisk träning med båda metoderna, prova vår kurs Joining Data with pandas.

Dataanalys i pandas

Huvudfördelen med pandas ligger i dess snabba dataanalysfunktionalitet. I det här avsnittet fokuserar vi på ett antal analysmetoder som du kan använda i pandas.

Sammanfattande operatorer (medelvärde, typvärde, median)

Som du såg tidigare kan du få medelvärdet för varje kolumnvärde med metoden .mean().

df.mean()
Pregnancies                   3.845052
Glucose                     120.894531
BloodPressure                69.105469
SkinThickness                20.536458
Insulin                      79.799479
BMI                          31.992578
DiabetesPedigreeFunction      0.471876
Age                          33.240885
Outcome                       0.348958
dtype: float64

Ett typvärde kan beräknas på liknande sätt med metoden .mode(). 

df.mode()

Typvärde för varje kolumn i pandas

Skriva ut typvärdet för kolumner i pandas

På samma sätt beräknas medianen för varje kolumn med metoden .median()

df.median()
Pregnancies                   3.0000
Glucose                     117.0000
BloodPressure                72.0000
SkinThickness                23.0000
Insulin                      30.5000
BMI                          32.0000
DiabetesPedigreeFunction      0.3725
Age                          29.0000
Outcome                       0.0000
dtype: float64

Skapa nya kolumner baserat på befintliga kolumner 

pandas möjliggör snabba och effektiva beräkningar genom att kombinera två eller fler kolumner som skalära variabler. Koden nedan dividerar varje värde i kolumnen Glucose med motsvarande värde i kolumnen Insulin för att beräkna en ny kolumn med namnet Glucose_Insulin_Ratio.

df2['Glucose_Insulin_Ratio'] = df2['Glucose']/df2['Insulin']
df2.head()

Skapa en ny kolumn från befintliga kolumner i pandas

Skapa en ny kolumn från befintliga kolumner i pandas

Rader där Insulin är 0 visar inf, eftersom division med noll ger oändlighet. I det här datasetet betyder 0 för Insulin att mätningen saknas (374 av 768 rader), så behandla dessa nollor som saknade innan du dividerar:

df2["Glucose_Insulin_Ratio"] = df2["Glucose"] / df2["Insulin"].where(df2["Insulin"] > 0)
df2["Glucose_Insulin_Ratio"].head()
1         NaN
2         NaN
3         NaN
4    0.946809
5    0.815476
Name: Glucose_Insulin_Ratio, dtype: float64

.where() behåller värden som uppfyller villkoret och ersätter resten med NaN, så kvoten blir saknad i stället för oändlig för dessa rader. Vår handledning om att lägga till kolumner i pandas visar fler sätt att härleda nya kolumner.

Räkna med .value_counts()

När en kolumn innehåller kategorier vill du ofta räkna hur många observationer som faller i varje kategori. Metoden .value_counts() gör detta. Här räknar vi till exempel antalet observationer där Outcome är diabetiker (1) och antalet observationer där Outcome är icke-diabetiker (0).

df['Outcome'].value_counts()
Outcome
0    500
1    268
Name: count, dtype: int64

Genom att lägga till argumentet normalize returneras andelar i stället för absoluta antal.

df['Outcome'].value_counts(normalize=True)
Outcome
0    0.651042
1    0.348958
Name: proportion, dtype: float64


Stäng av automatisk sortering av resultat med argumentet sort (True som standard). Standardsorteringen baseras på antalen i fallande ordning.

df['Outcome'].value_counts(sort=False)
Outcome
1    268
0    500
Name: count, dtype: int64

Du kan också använda .value_counts() på ett DataFrame-objekt och specifika kolumner i det i stället för bara en kolumn. Här tillämpar vi till exempel value_counts() på df med argumentet subset, som tar en lista med kolumner. 

df.value_counts(subset=['Pregnancies', 'Outcome'])
Pregnancies  Outcome
1            0          106
2            0           84
0            0           73
3            0           48
4            0           45
0            1           38
5            0           36
6            0           34
1            1           29
3            1           27
7            1           25
4            1           23
8            1           22
5            1           21
7            0           20
2            1           19
9            1           18
6            1           16
8            0           16
10           0           14
             1           10
9            0           10
11           1            7
13           0            5
             1            5
12           0            5
11           0            4
12           1            4
14           1            2
15           1            1
17           1            1
Name: count, dtype: int64

Aggreggera data med .groupby() i pandas

pandas låter dig aggreggera värden genom att gruppera dem efter specifika kolumnvärden. Du kan göra det genom att kombinera metoden .groupby() med en valfri sammanfattningsmetod. Koden nedan visar medelvärdet för var och en av de numeriska kolumnerna grupperade efter Outcome.

df.groupby('Outcome').mean()

Aggreggera data efter en kolumn i pandas

Aggreggera data efter en kolumn i pandas

.groupby() möjliggör gruppering efter mer än en kolumn genom att skicka en lista med kolumnnamn, som visas nedan.

df.groupby(['Pregnancies', 'Outcome']).mean()

Aggreggera data efter två kolumner i pandas

Aggreggera data efter två kolumner i pandas

Valfri sammanfattningsmetod kan användas tillsammans med .groupby(), inklusive .min(), .max(), .mean(), .median(), .sum() med flera. Vår handledning om pandas GroupBy täcker flera aggregat med .agg() och andra mönster.

Pivottabeller 

pandas låter dig också beräkna sammanfattningsstatistik som pivottabeller. Detta gör det enkelt att dra slutsatser baserat på en kombination av variabler. Koden nedan väljer raderna som unika värden av Pregnancies, kolumnvärdena är de unika värdena av Outcome, och cellerna innehåller medelvärdet av BMI i den motsvarande gruppen.

Till exempel, för Pregnancies = 5 och Outcome = 0, visar det sig att genomsnittligt BMI är 31,1.

pd.pivot_table(df, values="BMI", index='Pregnancies', 
               columns=['Outcome'], aggfunc='mean')
Outcome              0          1
Pregnancies                      
0            31.727397  39.213158
1            29.616038  37.793103
2            29.679762  34.578947
3            29.231250  32.548148
4            31.255556  33.873913
5            31.100000  36.780952
6            29.591176  31.775000
7            29.975000  34.756000
8            30.693750  32.204545
9            28.840000  33.300000
10           30.114286  31.380000
11           37.125000  39.385714
12           30.560000  34.575000
13           33.280000  36.720000
14                 NaN  35.100000
15                 NaN  37.100000
17                 NaN  40.900000

Datavisualisering i pandas

pandas erbjuder smidiga omslag till Matplotlib-funktioner för att göra det enkelt att visualisera dina DataFrames. Nedan ser du hur du gör vanliga visualiseringar med pandas.

Linjediagram i pandas

Med pandas kan du rita upp relationerna mellan variabler med linjediagram. Nedan är ett linjediagram över BMI och Glucose mot radindexet.

df[['BMI', 'Glucose']].plot.line()

Grundläggande linjediagram med pandas

Grundläggande linjediagram med pandas

Du kan välja färger med argumentet color.

df[['BMI', 'Glucose']].plot.line(color={"BMI": "red", "Glucose": "blue"})

Grundläggande linjediagram med pandas, med anpassade färger

Grundläggande linjediagram med pandas, med anpassade färger

Alla kolumner i df kan också ritas på olika skalor och axlar med argumentet subplots.

df.plot.line(subplots=True)

Delplottar för linjediagram med pandas

Delplottar för linjediagram med pandas

Stapeldiagram i pandas

För diskreta kolumner kan du använda ett stapeldiagram över kategorifrekvenserna för att visualisera deras fördelning. Variabeln Outcome med binära värden visualiseras nedan.

df['Outcome'].value_counts().plot.bar()

Stapeldiagram över Outcome-frekvenser i pandas

Stapeldiagram i pandas

Lådagram i pandas

Kvartilfördelningen för kontinuerliga variabler kan visualiseras med ett lådagram. Koden nedan låter dig skapa ett lådagram med pandas.

df.boxplot(column=['BMI'], by='Outcome')

Lådagram i pandas
Lådagram i pandas

Avslutande tankar

Nu har du det grundläggande arbetsflödet i pandas: läs in en fil i en DataFrame, inspektera den med .head(), .info() och .describe(), välj rader med .loc[] och .iloc[], rensa saknade värden och dubbletter, slå ihop tabeller och sammanfatta med .groupby() och pivottabeller.

Om du lärde dig pandas före 2026 är en vana värd att ändra: tilldela resultat på nytt i stället för att skicka inplace=True, och gör varje uppdatering med ett enda anrop till .loc[]. Det snabbaste sättet att få resten att sitta är att upprepa arbetsflödet på en datamängd du bryr dig om. Dessa resurser hjälper dig vidare:

pandas FAQ

Vad är pandas i Python?

pandas är ett öppet Python-bibliotek för att arbeta med tabulär data. Dess två centrala datastrukturer, DataFrame (en tabell) och Series (en enskild kolumn), har funktioner för att importera, rensa, forma om, aggregera och plotta data, vilket gör det till standardverktyget för dataanalys i Python.

Varför ska jag lära mig pandas?

Om du arbetar med data i Python är pandas i princip ett måste att lära sig. Det förenklar hantering och analys av data, så att du kan fokusera på att ta fram insikter och skapa värde. Oavsett om du hanterar små datamängder eller storskalig data gör pandas livet enklare med sin hastighet, flexibilitet och användarvänliga datastrukturer.

Hur installerar jag pandas?

Kör pip install pandas i din terminal, eller conda install pandas om du använder conda. pandas 3 kräver Python 3.11 eller nyare. Anaconda inkluderar pandas som standard, och DataCamps DataLab har det förinstallerat.

Vilka är de grundläggande datastrukturerna i pandas?

De två primära datastrukturerna i pandas är Series och DataFrame. En Series är i princip en kolumn, och en DataFrame är en flerdimensionell tabell som består av en samling Series. Dessa strukturer är flexibla, vilket innebär att de kan innehålla data av olika typer (t.ex. heltal, sträng, flyttal).

Är pandas bra för stora datamängder?

pandas hanterar miljoner rader utan problem, så länge datan får plats i datorns minne. För data som inte gör det, läs in i batchar med argumentet chunksize, eller byt till ett verktyg byggt för större data, såsom Polars, Dask eller PySpark.

Hur importerar jag data till pandas?

pandas kan läsa data från olika filformat som CSV, Excel, SQL-databaser, JSON och fler. Kommandona pd.read_csv(), pd.read_excel(), pd.read_sql() och pd.read_json() används för att importera data från respektive filtyp. Alla dessa kommandon returnerar en DataFrame som du kan manipulera med pandas.

Vad förändrades i pandas 3.0?

pandas 3.0, som släpptes i januari 2026, gjorde Copy-on-Write till standard, så varje delmängd beter sig som en kopia och kedjad tilldelning som df["col"][0] = x uppdaterar inte längre den ursprungliga DataFrame:en. Det härsluter också att textkolumner tolkas som en dedikerad str-datatyp i stället för object, och kräver Python 3.11 eller nyare. pandas 3.1 avvecklade sedan inplace=True för metoder som dropna() och sort_values().

Vad är skillnaden mellan loc och iloc i pandas?

.loc[] väljer rader och kolumner efter etikett, och .iloc[] väljer dem efter heltalsposition, med start på 0. Även intervall skiljer sig: .loc[100:110] inkluderar slutetiketten, medan .iloc[100:110] stoppar före position 110. Se vår guide om loc vs iloc för fler exempel.

Hur slår jag ihop två DataFrames i pandas?

Använd df1.merge(df2, on="key", how="left") för att slå ihop två DataFrames på en gemensam kolumn, på samma sätt som en SQL-join. Argumentet how väljer jointyp ("left", "right", "inner" eller "outer"). För att stapla DataFrames i stället, använd pd.concat().

Ämnen