Výber stĺpcov, filtrovanie a indexovanie

JupyterLab
Pandas
Výber
Filtrovanie
Indexovanie
Autor

Jakub Šperka

Publikované

18. septembra 2025

🧰 Úvod

V tejto kapitole sú zhrnuté základné operácie s pandas.DataFrame: - Výber stĺpcov a riadkov ([], .loc, .iloc) - Filtrovanie riadkov (boolean masky, .query()) - Indexovanie (nastavenie/obnova indexu, výber podľa indexu) - Triedenie - Výber podľa podmienok viacerých stĺpcov - reťazenie operácií

Budeme pracovať s malým ukážkovým súborom dát, ktorý si vytvoríme v behu notebooku.


🧪 Ukážkové dáta

Kód
import pandas as pd

data = {
    "Meno": ["Anna", "Boris", "Cyril", "Dora", "Eva", "Filip"],
    "Vek": [25, 30, 35, 28, 22, 40],
    "Mesto": ["Bratislava", "Košice", "Žilina", "Bratislava", "Nitra", "Košice"],
    "Body": [88, 92, 75, 90, 66, 98],
    "Aktivny": [True, True, False, True, False, True],
}
df = pd.DataFrame(data)
df
Meno Vek Mesto Body Aktivny
0 Anna 25 Bratislava 88 True
1 Boris 30 Košice 92 True
2 Cyril 35 Žilina 75 False
3 Dora 28 Bratislava 90 True
4 Eva 22 Nitra 66 False
5 Filip 40 Košice 98 True

🎯 Výber stĺpcov

Jeden stĺpec (vracia Series)

Kód
df['Meno']
0     Anna
1    Boris
2    Cyril
3     Dora
4      Eva
5    Filip
Name: Meno, dtype: object

Viac stĺpcov (vracia DataFrame)

Kód
df[['Meno', 'Vek']]
Meno Vek
0 Anna 25
1 Boris 30
2 Cyril 35
3 Dora 28
4 Eva 22
5 Filip 40

📍 Výber riadkov – .loc vs .iloc

  • .loc[riadky, stĺpce]: výber podľa menoviek (indexu/stĺpcov)
  • .iloc[riadky, stĺpce]: výber podľa pozície (0-based - začiatok indexovania od nuly)

Výber rozsahu riadkov podľa indexu stĺpcov

Kód
# Prvé tri riadky a stĺpce 'Meno' a 'Vek' podľa ich pozície (indexu)
df.iloc[0:3, [0, 1]]
Meno Vek
0 Anna 25
1 Boris 30
2 Cyril 35

Výber rozsahu riadkov podľa indexu stĺpcov

Kód
# Riadky s indexami 0 až 3 (vrátane) a stĺpce podľa názvov 'Meno' a 'Vek'
df.loc[0:3, ['Meno', 'Vek']]
Meno Vek
0 Anna 25
1 Boris 30
2 Cyril 35
3 Dora 28

🔎 Filtrovanie riadkov (boolean masky)

Kód
# Negácia podmienky: mesto nie je Bratislava
df[~(df['Mesto'] == 'Bratislava')]
Meno Vek Mesto Body Aktivny
1 Boris 30 Košice 92 True
2 Cyril 35 Žilina 75 False
4 Eva 22 Nitra 66 False
5 Filip 40 Košice 98 True
Kód
# Jednoduchá podmienka: iba aktívni
df[df['Aktivny'] == True]
Meno Vek Mesto Body Aktivny
0 Anna 25 Bratislava 88 True
1 Boris 30 Košice 92 True
3 Dora 28 Bratislava 90 True
5 Filip 40 Košice 98 True
Kód
# Viac podmienok: vek >= 30 a Body > 80
df[(df['Vek'] >= 30) & (df['Body'] > 80)]
Meno Vek Mesto Body Aktivny
1 Boris 30 Košice 92 True
5 Filip 40 Košice 98 True
Kód
# Negácia podmienky: mesto nie je Bratislava
df[~(df['Mesto'] == 'Bratislava')]
Meno Vek Mesto Body Aktivny
1 Boris 30 Košice 92 True
2 Cyril 35 Žilina 75 False
4 Eva 22 Nitra 66 False
5 Filip 40 Košice 98 True

🗣️ Filtrovanie pomocou .query() (čitateľnejšia syntax)

Kód
# Pozor: vo výrazoch používame názvy stĺpcov priamo
df.query("Vek >= 30 and Body > 80 and Aktivny")
Meno Vek Mesto Body Aktivny
1 Boris 30 Košice 92 True
5 Filip 40 Košice 98 True

🧭 Indexovanie: nastavenie a obnova indexu

Aktuálny RangeIndex

Kód
df.index
RangeIndex(start=0, stop=6, step=1)

Nastavenie vlastného indexu

Kód
df_meno = df.set_index('Meno')
df_meno
Vek Mesto Body Aktivny
Meno
Anna 25 Bratislava 88 True
Boris 30 Košice 92 True
Cyril 35 Žilina 75 False
Dora 28 Bratislava 90 True
Eva 22 Nitra 66 False
Filip 40 Košice 98 True

Výber podľa menovky indexu

Kód
df_meno.loc['Boris']
Vek            30
Mesto      Košice
Body           92
Aktivny      True
Name: Boris, dtype: object

Obnovenie pôvodného indexu

Kód
df_meno.reset_index()
Meno Vek Mesto Body Aktivny
0 Anna 25 Bratislava 88 True
1 Boris 30 Košice 92 True
2 Cyril 35 Žilina 75 False
3 Dora 28 Bratislava 90 True
4 Eva 22 Nitra 66 False
5 Filip 40 Košice 98 True

🎚️ Výber podľa indexu + stĺpca

Kód
# Keď je indexom 'Meno', môžeme vyberať kombinácie:

df_meno = df.set_index('Meno')

df_meno.loc[['Anna', 'Dora'], ['Mesto', 'Body']]
Mesto Body
Meno
Anna Bratislava 88
Dora Bratislava 90

↕️ Triedenie riadkov

Kód
# Triedenie podľa jedného stĺpca vzostupne
df.sort_values('Vek')

# Triedenie podľa viacerých stĺpcov (Vek vzostupne, Body zostupne)
df.sort_values(['Vek', 'Body'], ascending=[True, False])
Meno Vek Mesto Body Aktivny
4 Eva 22 Nitra 66 False
0 Anna 25 Bratislava 88 True
3 Dora 28 Bratislava 90 True
1 Boris 30 Košice 92 True
2 Cyril 35 Žilina 75 False
5 Filip 40 Košice 98 True

⛓️ Reťazenie operácií

Kód
# Vyber aktívnych z Bratislavy, zaujíma nás len Meno a Body, zotriedime podľa Body zostupne
df.query("Aktivny and Mesto == 'Bratislava'")[['Meno', 'Body']].sort_values('Body', ascending=False)
Meno Body
3 Dora 90
0 Anna 88

🧠 Zhrnutie

  • Výber stĺpcov: df['col'], df[['c1','c2']]
  • Výber riadkov: .loc[] (menovky), .iloc[] (pozície - indexy)
  • Filtrovanie: boolean masky a .query()
  • Indexovanie: set_index(), reset_index(), výber podľa indexu
  • Triedenie a pipeline: sort_values() a reťazenie operácií pre čitateľný kód
  • Na label-based výber používajte .loc, na position-based .iloc.
  • Pri viacerých podmienkach nezabudnite na zátvorky a operátory & (AND), | (OR), ~ (NOT).
  • .set_index() a .reset_index() uľahčujú výber podľa kľúčových hodnôt.
  • .query() býva pre zložitejšie filtre prehľadnejšie a niekedy aj rýchlejšie.

📚 Oficiálna dokumentácia Pandas

Podrobný popis funkcií, ich parametrov a príkladov použitia nájdete v oficiálnej dokumentácii knižnice Pandas na adrese: https://pandas.pydata.org/docs/.


🎞️ Videonávod