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] = 35uppdaterar en temporär kopia och lämnardfoförändrad, och pandas varnar med ettChainedAssignmentError. Använd ett enda anrop till.loc[]i stället. - Strängar har en egen datatyp. Textkolumner tolkas nu som
stri stället förobject, med PyArrow i bakgrunden när det är installerat. inplace=Trueär föråldrat försort_values(),reset_index(),dropna(),drop_duplicates(),rename()och flera andra metoder. Tilldela om resultatet i stället:df = df.dropna().

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.tail(n = 10)

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

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

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 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
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](https://media.datacamp.com/cms/pandas-02.png?w=802)
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 i pandas med .loc[]
df2.iloc[100:110]
![Isolera rader i pandas med .loc[]](https://media.datacamp.com/legacy/v1668597143/image28_07af2245c8.png?w=724)
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[]](https://media.datacamp.com/legacy/v1668597142/image31_c5acf2a9bd.png?w=723)
Isolera rader med en lista i pandas med .loc[]
df2.iloc[[100, 200, 300]]
![Rader på positionerna 100, 200 och 300 valda med .iloc[]](https://media.datacamp.com/legacy/v1668597142/image25_36fb2e17e1.png?w=802)
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
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
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()

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
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
.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
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
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
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
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 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
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:
- [Fusklappar] En uppsjö av fusklappar för Python och pandas att använda som referens under din inlärning
- [Livesänd utbildning] Våra kostnadsfria live-sessioner med kodning i realtid, varav många använder pandas
- [Kurser] Data Manipulation with pandas och Joining Data with pandas för interaktiv övning
- [Intervjuförberedelse] Våra bästa intervjufrågor om pandas för att testa vad du kan
- [Fler handledningar] Utforska våra övriga handledningar om pandas och PyData-ekosystemet, inklusive hur du implementerar glidande medelvärden i pandas och användning av pandas .apply()-metoden
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().
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
pip install pandas; pandas 3 kräver Python 3.11 eller nyare..loc[]väljer efter etikett,.iloc[]efter position..loc[].df = df.dropna()) i stället för att använda det föråldradeinplace=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:
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:
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.