Pandas pro začátečníky: analýza dat z CSV a Excelu v Pythonu
Základy knihovny pandas – načtení CSV a Excelu, filtrování dat, groupby, chybějící hodnoty, spojování tabulek a export. Na praktickém příkladu.
Pandas je knihovna pro práci s tabulkovými daty. Co v Excelu děláte klikáním – filtry, kontingenční tabulky, SVYHLEDAT – v pandas napíšete na pár řádků a zopakujete na libovolném množství souborů. Projdeme si to na příkladu prodejů e-shopu.
Instalace
pip install pandas openpyxl
openpyxl je potřeba pro čtení a zápis .xlsx.
Načtení dat
Mějme prodeje.csv:
datum;produkt;kategorie;mnozstvi;cena
2026-01-03;Hrnek;Domácnost;2;149,90
2026-01-03;Tričko;Oblečení;1;399,00
2026-01-04;Hrnek;Domácnost;5;149,90
České CSV z Excelu mívají středník a desetinnou čárku:
import pandas as pd
df = pd.read_csv(
"prodeje.csv",
sep=";",
decimal=",",
parse_dates=["datum"],
encoding="utf-8", # u starších exportů zkuste "cp1250"
)
Excel:
df = pd.read_excel("prodeje.xlsx", sheet_name="List1")
První pohled na data
df.head() # prvních 5 řádků
df.info() # sloupce, typy, počet ne-prázdných hodnot
df.describe() # statistiky číselných sloupců
df.shape # (řádky, sloupce)
df["kategorie"].value_counts()
df.info() je nejdůležitější první krok: ukáže, jestli se čísla načetla jako čísla (float64, int64) a ne jako text (object).
Výběr sloupců a řádků
df["produkt"] # jeden sloupec (Series)
df[["produkt", "cena"]] # více sloupců (DataFrame)
df.loc[0] # řádek podle indexu
df.loc[df["mnozstvi"] > 3] # filtr
df.loc[df["mnozstvi"] > 3, ["produkt", "mnozstvi"]]
Více podmínek se spojuje & (a) a | (nebo), každá v závorkách:
df[(df["kategorie"] == "Domácnost") & (df["cena"] < 200)]
df[df["produkt"].isin(["Hrnek", "Tričko"])]
df[df["produkt"].str.contains("hr", case=False)]
Python operátory and/or tu nefungují – vyhodí ValueError: The truth value of a Series is ambiguous.
Nové sloupce
df["trzba"] = df["mnozstvi"] * df["cena"]
df["mesic"] = df["datum"].dt.to_period("M")
df["velka_objednavka"] = df["trzba"] > 500
Operace probíhají nad celým sloupcem najednou. Cyklus for přes řádky je v pandas téměř vždy zbytečný a pomalý.
Seskupování (groupby)
Ekvivalent kontingenční tabulky:
df.groupby("kategorie")["trzba"].sum()
souhrn = (
df.groupby(["mesic", "kategorie"])
.agg(trzba=("trzba", "sum"),
kusu=("mnozstvi", "sum"),
objednavek=("produkt", "count"))
.reset_index()
.sort_values("trzba", ascending=False)
)
Kontingenční tabulka s měsíci ve sloupcích:
pd.pivot_table(df, values="trzba", index="kategorie",
columns="mesic", aggfunc="sum", fill_value=0)
Chybějící hodnoty
df.isna().sum() # kolik chybí v každém sloupci
df = df.dropna(subset=["cena"]) # zahodit řádky bez ceny
df["kategorie"] = df["kategorie"].fillna("Nezařazeno")
Spojování tabulek (SVYHLEDAT)
Máme produkty.csv s dodavateli:
produkty = pd.read_csv("produkty.csv", sep=";")
spojeno = df.merge(produkty, on="produkt", how="left")
how="left" zachová všechny prodeje, i když produkt v číselníku chybí (dostane NaN). Po spojení zkontrolujte počet řádků – pokud vzrostl, máte v číselníku duplicitní klíče. Pandas to umí hlídat: merge(..., validate="many_to_one").
Export
souhrn.to_csv("souhrn.csv", index=False, sep=";", decimal=",", encoding="utf-8-sig")
souhrn.to_excel("souhrn.xlsx", index=False)
utf-8-sig zajistí, že Excel správně zobrazí češtinu.
Více listů do jednoho souboru:
with pd.ExcelWriter("report.xlsx") as writer:
souhrn.to_excel(writer, sheet_name="Souhrn", index=False)
df.to_excel(writer, sheet_name="Data", index=False)
Časté pasti
SettingWithCopyWarning– upravujete výřez z jiné tabulky. Pokud chcete samostatnou kopii, použijte.copy():drahe = df[df["cena"] > 300].copy(). V pandas 3.0 se chování zjednodušuje díky režimu Copy-on-Write.- Čísla jako text – při špatném
decimalse149,90načte jako řetězec. Ověřtedf.dtypes, případněpd.to_numeric(df["cena"].str.replace(",", ".")). - Datum jako text – bez
parse_datesnebopd.to_datetimenefunguje.dtani řazení podle data. U formátu03.01.2026použijtepd.to_datetime(df["datum"], format="%d.%m.%Y").
Kam dál
- Grafy:
df.plot()využívá matplotlib (pip install matplotlib). - Velká data: pokud se soubor nevejde do paměti, podívejte se na
chunksizevread_csvnebo na knihovnu Polars.
Pokud potřebujete z konkrétní tabulky dostat konkrétní přehled, přiložte ukázku CSV do ColdHost AI v režimu Programování a popište, co chcete vidět – dostanete skript, který pak spouštíte každý měsíc znovu.