Příklady Pandas concat()

Funkce concat() v knihovně Pandas je klíčová pro spojování datových rámců (DataFrame). Umožňuje efektivně skládat více datových sad dohromady, a to buď vertikálně (podél řádků), nebo horizontálně (podél sloupců). Tato funkce se vyznačuje velkou flexibilitou, neboť nabízí řadu parametrů pro přizpůsobení konečného výsledku.

Příprava dat pro demonstraci

Pro účely názorných ukázek si vytvoříme tři různé DataFrame:

import pandas as pd

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]})

df3 = pd.DataFrame({'E': [13, 14, 15], 'F': [16, 17, 18]})

Spojování datových rámců vertikálně (podél řádků)

Pro svislé spojení (skládání pod sebe) použijeme parametr axis=0. Tento parametr instruuje funkci, aby spojovala datové rámce tak, že nové řádky jsou přidávány pod stávající.

Spojení bez specifikace klíče

pd.concat([df1, df2, df3], axis=0)

Výsledkem je nový DataFrame, kde data jsou skládána pod sebe, a pokud datové rámce nemají stejné sloupce, chybějící hodnoty jsou vyplněny NaN:

   A    B   C    D    E    F
0  1.0  4.0 NaN  NaN  NaN  NaN
1  2.0  5.0 NaN  NaN  NaN  NaN
2  3.0  6.0 NaN  NaN  NaN  NaN
0  NaN  NaN  7.0 10.0  NaN  NaN
1  NaN  NaN  8.0 11.0  NaN  NaN
2  NaN  NaN  9.0 12.0  NaN  NaN
0  NaN  NaN  NaN  NaN 13.0 16.0
1  NaN  NaN  NaN  NaN 14.0 17.0
2  NaN  NaN  NaN  NaN 15.0 18.0

Spojení se specifikací klíče

Parametr keys umožňuje pojmenovat jednotlivé datové rámce před spojením, což vede k vytvoření MultiIndexu:

pd.concat([df1, df2, df3], axis=0, keys=['df1', 'df2', 'df3'])

Výsledný DataFrame bude mít strukturu MultiIndexu, kde první úroveň indexu reprezentuje jména původních datových rámců:

          A    B    C    D    E    F
df1 0    1.0  4.0  NaN  NaN  NaN  NaN
    1    2.0  5.0  NaN  NaN  NaN  NaN
    2    3.0  6.0  NaN  NaN  NaN  NaN
df2 0    NaN  NaN  7.0 10.0  NaN  NaN
    1    NaN  NaN  8.0 11.0  NaN  NaN
    2    NaN  NaN  9.0 12.0  NaN  NaN
df3 0    NaN  NaN  NaN  NaN 13.0 16.0
    1    NaN  NaN  NaN  NaN 14.0 17.0
    2    NaN  NaN  NaN  NaN 15.0 18.0

Spojování datových rámců horizontálně (podél sloupců)

Pro horizontální spojení (skládání vedle sebe) se používá parametr axis=1. Tímto způsobem se sloupce z jednotlivých datových rámců spojují vedle sebe do nového datového rámce.

Spojení bez specifikace klíče

pd.concat([df1, df2, df3], axis=1)

Spojením získáme nový datový rámec, kde sloupce jsou skládány vedle sebe:

   A    B   C   D    E    F
0  1    4   7  10   13   16
1  2    5   8  11   14   17
2  3    6   9  12   15   18

Spojení se specifikací klíče

Stejně jako u spojování po řádcích, i zde můžeme specifikovat klíče pro každý datový rámec:

pd.concat([df1, df2, df3], axis=1, keys=['df1', 'df2', 'df3'])

Výsledkem je MultiIndex DataFrame, kde první úroveň indexu sloupce reprezentuje původní jména DataFrame:

    df1      df2      df3    
      A    B    C    D    E    F
0   1    4  7.0 10.0  13  16
1   2    5  8.0 11.0  14  17
2   3    6  9.0 12.0  15  18

Pokročilé možnosti

Funkce concat() poskytuje pokročilé parametry pro detailní kontrolu nad spojováním:

  • Join: Parametr join určuje, jak se mají spojovat indexy řádků.
    • 'inner': Vrátí jen řádky, které se vyskytují ve všech spojených DataFrame.
    • 'outer': Vrátí všechny řádky z obou DataFrame, a pokud se nenacházejí ve všech, doplní chybějící hodnoty NaN.
    • 'left': Vrátí všechny řádky z levého DataFrame a odpovídající řádky z pravého DataFrame.
    • 'right': Vrátí všechny řádky z pravého DataFrame a odpovídající řádky z levého DataFrame.
  • ignore_index: Pokud je tento parametr nastaven na True, dojde k ignorování stávajících indexů a výsledný DataFrame získá nový, číselný index.

Závěr

Funkce concat() je univerzální nástroj, který umožňuje flexibilní spojování datových rámců v Pandas. Zvládnutí jejích různých parametrů vám umožní efektivně pracovat s daty a dosáhnout požadovaných výsledků.

Často kladené otázky

1. Jaký je účel funkce concat() v Pandas?
Funkce concat() slouží ke spojování více DataFrame do jednoho, a to jak po řádcích, tak po sloupcích.

2. Jaký je rozdíl mezi spojením podél řádků a sloupců?
Spojení podél řádků (vertikální) přidává řádky z DataFrame pod sebe, zatímco spojení podél sloupců (horizontální) přidává sloupce vedle sebe.

3. Jak funguje parametr keys v concat()?
Parametr keys umožňuje pojmenovat jednotlivé datové rámce, které se spojují, a tím vytváří MultiIndex.

4. Jaký je rozdíl mezi join='inner' a join='outer'?
join='inner' vrací jen řádky, které mají společné indexy ve všech spojených DataFrame, zatímco join='outer' vrací všechny řádky, doplněné o chybějící hodnoty (NaN).

5. Kdy bych měl použít parametr ignore_index?
Parametr ignore_index byste měli použít, pokud chcete ignorovat stávající indexy ve spojovaných DataFrame a vytvořit nový, číselný index pro výsledný DataFrame.

6. Lze spojovat DataFrame s různým počtem řádků nebo sloupců?
Ano, concat() umí spojovat DataFrame s různým počtem řádků nebo sloupců, ale chybějící hodnoty budou vyplněny NaN.

7. Jak se chovat k duplicitním klíčům?
Duplicitní klíče je možné odstranit, nebo použít funkci merge() pro složitější spojování.

8. Jak ověřit, že spojení proběhlo správně?
Můžete si ověřit tvary DataFrame před a po operaci spojení nebo použít funkci info() pro zobrazení informací o výsledném DataFrame.