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.