<KodLexikon/>
Illustration för python-programmering
← Alla artiklar
python14 min läsning2026-03-12

Python dataanalys med Pandas: Från CSV till insikter

Ladda, transformera och analysera data med Pandas. Groupby, merge, tidsserier och visualisering — med riktiga dataset och konkreta exempel.

Pandas är det verktyg som gör Python till ett seriöst alternativ för dataanalys. Det ger dig kraftfulla datastrukturer för att ladda, transformera och analysera data med några rader kod. Vare sig du arbetar med CSV-filer, databaser eller API-data — Pandas hanterar det.

Den här guiden tar dig från att ladda en CSV till att producera meningsfulla insikter. Med riktiga kodexempel, inte abstrakta förklaringar.

Ladda och inspektera data

Allt börjar med att ladda data. Pandas kan läsa CSV, Excel, JSON, SQL och en mängd andra format. read_csv är den vanligaste startpunkten.

import pandas as pd

# Ladda CSV-fil
df = pd.read_csv("forsaljning.csv")

# Första överblicken
print(df.shape)       # (1500, 8) — 1500 rader, 8 kolumner
print(df.head())      # Första 5 raderna
print(df.dtypes)      # Datatyper per kolumn
print(df.describe())  # Statistisk sammanfattning

# Output av describe():
#           pris       antal
# count  1500.00     1500.00
# mean    349.50       12.30
# std     180.20        8.45
# min      29.00        1.00
# max     999.00       50.00

# Kolla efter saknade värden
print(df.isnull().sum())
# produkt     0
# kategori    3
# pris        0
# datum       0
# stad       12

Filtrera och transformera

Pandas styrka ligger i hur enkelt du kan filtrera, sortera och omforma data. Booleska masker och query() gör filtrering intuitivt.

# Filtrera med boolesk mask
dyra_produkter = df[df["pris"] > 500]

# Flera villkor (& för AND, | för OR)
stockholm_dyra = df[
    (df["stad"] == "Stockholm") &
    (df["pris"] > 300)
]

# query() — mer läsbart för komplexa filter
resultat = df.query(
    'stad == "Göteborg" and kategori == "Elektronik" and pris < 1000'
)

# Skapa nya kolumner
df["total"] = df["pris"] * df["antal"]
df["prisgrupp"] = pd.cut(
    df["pris"],
    bins=[0, 100, 300, 500, 1000],
    labels=["Budget", "Mellan", "Premium", "Lyx"]
)

# Datum-hantering
df["datum"] = pd.to_datetime(df["datum"])
df["månad"] = df["datum"].dt.month
df["veckodag"] = df["datum"].dt.day_name()
df["kvartal"] = df["datum"].dt.quarter

# Sortera
df_sorted = df.sort_values("total", ascending=False)

Groupby — aggregera och analysera

groupby är kanske Pandas mest kraftfulla funktion. Den grupperar data baserat på en eller flera kolumner och applicerar aggregeringsfunktioner — summa, medelvärde, antal, eller egna funktioner.

# Försäljning per stad
per_stad = df.groupby("stad")["total"].agg([
    "sum", "mean", "count"
]).sort_values("sum", ascending=False)

print(per_stad.head())
#              sum      mean  count
# Stockholm  450000   380.50   1183
# Göteborg   280000   320.10    875
# Malmö      195000   290.80    670

# Gruppera på flera kolumner
per_stad_kategori = df.groupby(
    ["stad", "kategori"]
)["total"].sum().unstack(fill_value=0)

# Anpassad aggregering
sammanfattning = df.groupby("kategori").agg({
    "pris": ["mean", "median", "std"],
    "antal": "sum",
    "total": ["sum", "max"],
}).round(2)

# Pivot-tabeller — som Excel men i kod
pivot = pd.pivot_table(
    df,
    values="total",
    index="stad",
    columns="kategori",
    aggfunc="sum",
    fill_value=0,
    margins=True  # Lägg till totaler
)

Merge — kombinera dataset

I verkliga projekt har du sällan all data i en fil. merge är Pandas motsvarighet till SQL JOIN — du kombinerar tabeller baserat på gemensamma kolumner.

# Två separata dataset
orders = pd.read_csv("orders.csv")
customers = pd.read_csv("customers.csv")

# Inner join (bara matchande rader)
merged = pd.merge(
    orders,
    customers,
    on="customer_id",
    how="inner"
)

# Left join (alla orders, matcha med kund om möjlig)
merged = pd.merge(
    orders,
    customers,
    on="customer_id",
    how="left"
)

# Merge på olika kolumnnamn
merged = pd.merge(
    orders,
    customers,
    left_on="kund_id",
    right_on="id",
    how="left"
)

# Konkatenera (stapla vertikalt)
q1 = pd.read_csv("q1_2026.csv")
q2 = pd.read_csv("q2_2026.csv")
helår = pd.concat([q1, q2], ignore_index=True)

Tidsserieanalys

Pandas har kraftfullt stöd för tidsseriedata. Resample för att aggregera per tidsenhet, rolling för glidande medelvärden, och shift för att jämföra med föregående perioder.

# Sätt datum som index
df = df.set_index("datum").sort_index()

# Daglig till månatlig aggregering
månatlig = df["total"].resample("M").sum()

# Glidande medelvärde (7 dagar)
df["rolling_7d"] = df["total"].rolling(
    window=7
).mean()

# Jämför med föregående månad
df["förra_månaden"] = df["total"].shift(30)
df["förändring_%"] = (
    (df["total"] - df["förra_månaden"])
    / df["förra_månaden"] * 100
).round(1)

# Tidsbaserad filtrering
q1_2026 = df["2026-01":"2026-03"]
mars = df["2026-03"]

Visualisering med Matplotlib

Pandas har inbyggd plotting via Matplotlib. Det räcker inte för publikationer, men det är perfekt för snabb explorativ analys.

import matplotlib.pyplot as plt

# Linjediagram — försäljningstrend
df["total"].resample("W").sum().plot(
    figsize=(12, 5),
    title="Veckovis försäljning 2026",
    ylabel="SEK",
)
plt.tight_layout()
plt.savefig("trend.png", dpi=150)

# Stapeldiagram — försäljning per kategori
df.groupby("kategori")["total"].sum().plot(
    kind="bar",
    title="Försäljning per kategori",
    color=["#3b82f6", "#10b981", "#f59e0b", "#ef4444"],
)
plt.tight_layout()
plt.savefig("kategorier.png", dpi=150)

Pandas är ett oumbärligt verktyg för alla som jobbar med data i Python. Lär dig grunderna i Python i vår Python-programmeringsguide, eller kolla in vår guide för nybörjare om du precis har börjat.