Pandas merge() – Sloučení dvou objektů DataFrame

Úvod do problematiky

Funkce merge(), kterou nabízí knihovna pandas, představuje efektivní prostředek pro propojování a kombinování dvou a více datových struktur typu DataFrame. Umožňuje flexibilně spojovat data pocházející z různých zdrojů a následně s nimi pracovat, například provádět agregace, filtrování nebo výpočty.

Jak funguje merge()?

Mechanismus funkce merge() spočívá v porovnávání klíčů obsažených ve dvou datových rámcích. Na výstupu získáme nový datový rámec, který kombinuje data z obou původních struktur. Společné klíče, používané pro sloučení, představují sloupce (nebo skupinu sloupců) se shodným obsahem v obou datových rámcích.

Zápis funkce merge() je definován následovně:

python
pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False)

Kde jednotlivé parametry znamenají:

  • left: Datový rámec vlevo, který má být sloučen.
  • right: Datový rámec vpravo, který má být sloučen.
  • how: Definuje typ spojení, může nabývat hodnot ‚inner‘, ‚outer‘, ‚left‘, ‚right‘ nebo ‚cross‘.
  • on: Specifikuje klíč nebo sloupce, které slouží pro sloučení.
  • left_on: Udává klíč/sloupce v levém datovém rámci pro sloučení.
  • right_on: Udává klíč/sloupce v pravém datovém rámci pro sloučení.
  • left_index: Logická hodnota (True/False) určující, zda se má index levého datového rámce použít jako klíč pro sloučení.
  • right_index: Logická hodnota (True/False) určující, zda se má index pravého datového rámce použít jako klíč pro sloučení.

Varianty spojení dat

Funkce merge() podporuje různé způsoby spojování dat:

  • Vnitřní spojení (inner): Vrací pouze ty řádky, které mají shodné klíče v obou datových rámcích.
  • Vnější spojení (outer): Vrací všechny řádky z obou datových rámců. Pokud řádek nemá odpovídající klíč, chybějící hodnoty jsou nahrazeny NaN.
  • Levé spojení (left): Vrací všechny řádky z levého datového rámce a ty řádky z pravého datového rámce, které mají odpovídající klíč.
  • Pravé spojení (right): Vrací všechny řádky z pravého datového rámce a ty řádky z levého datového rámce, které mají odpovídající klíč.
  • Křížové spojení (cross): Vygeneruje nový datový rámec, který obsahuje všechny kombinace řádků z obou vstupních datových rámců.

Příklady použití

Příklad 1: Vnitřní spojení

Mějme dva datové rámce, left_df a right_df, které obsahují informace o zákaznících a jejich objednávkách. Chceme tyto rámce propojit na základě sloupce customer_id.

python
import pandas as pd

left_df = pd.DataFrame({
‚customer_id‘: [1, 2, 3],
‚name‘: [‚Alice‘, ‚Bob‘, ‚Carol‘],
‚city‘: [‚New York‘, ‚London‘, ‚Paris‘]
})

right_df = pd.DataFrame({
‚customer_id‘: [1, 2, 4],
‚order_id‘: [100, 101, 102],
‚product‘: [‚iPhone‘, ‚iPad‘, ‚MacBook‘]
})

merged_df = pd.merge(left_df, right_df, on=’customer_id‘)

print(merged_df)

Výstup:


customer_id name city order_id product
0 1 Alice New York 100 iPhone
1 2 Bob London 101 iPad

Příklad 2: Vnější spojení

Vnější spojení zahrne všechny řádky z obou datových rámců, a to i ty, které nemají odpovídající klíč.

python
merged_df = pd.merge(left_df, right_df, on='customer_id', how='outer')

print(merged_df)

Výstup:


customer_id name city order_id product
0 1 Alice New York 100 iPhone
1 2 Bob London 101 iPad
2 3 Carol Paris NaN NaN
3 4 NaN NaN 102 MacBook

Závěrem

Funkce merge() v pandas je mocným nástrojem pro slučování a propojování datových rámců. Umožňuje provádět různé typy spojení na základě klíčů, a tak vytvářet nové datové rámce, které kombinují data z různých zdrojů. Pochopení rozdílů mezi jednotlivými typy spojení a jejich správné použití je zásadní pro efektivní práci s daty pomocí knihovny pandas.

Často kladené dotazy (FAQ)

1. K čemu slouží funkce merge()?
Funkce merge() slouží ke sloučení dvou datových rámců pandas na základě společných klíčů.

2. Jaké druhy spojení merge() podporuje?
Funkce podporuje vnitřní, vnější, levé, pravé a křížové spojení.

3. Jaké je výchozí nastavení pro typ spojení?
Standardně je nastaveno vnitřní spojení.

4. Jak spojím datové rámce na základě více klíčů?
Pomocí argumentu on zadejte seznam klíčů.

5. Co signalizuje hodnota NaN ve sloučeném datovém rámci?
Hodnota NaN znamená, že daný řádek nemá odpovídající klíč v druhém datovém rámci.

6. Jak odstranit duplicitní řádky ze sloučeného datového rámce?
Použijte metodu drop_duplicates().

7. Jak mohu použít index jako klíč pro spojení?
Nastavte parametry left_index a right_index na True.

8. Jaký je rozdíl mezi vnějším a křížovým spojením?
Vnější spojení zahrnuje všechny řádky, křížové spojení vytváří všechny možné kombinace řádků.

9. Jak spojím více než dva datové rámce?
Opakovaně použijte funkci merge().

10. Je merge() efektivní pro velké objemy dat?
Ano, funkce je optimalizována pro efektivní práci i s rozsáhlými datovými sadami.