11. diel - Pandas - Kombinovanie DataFrame Nové

V minulej lekcii, Pandas - Matematické a štatistické metódy, sme si ukázali niektoré matematické metódy a štatistické metódy.

V tomto tutoriále knižnice Pandas v Pythone sa zameriame na metódy, ktoré nám pomáhajú efektívne kombinovať dataframe. Ukážeme si metódy ako concat(), merge(), join() alebo update().

Kombinovanie DataFrame v Pandas

Než si predstavíme dnešnú tému, poďme si najskôr importovať testovacie dáta.

Import dát

Rovnako ako v lekcii - Pandas - Metódy pre výber, radenie a analýzu dát, použijeme dataset s úbytkom zamestnancov v zdravotníckom sektore v USA. Dataset je opäť dostupný v prílohe na konci lekcie.

Naimportujeme si dáta:

import pandas as pd
df = pd.read_csv('healthcare.csv')
df

Výsledok importu dát je nasledujúci:

Import dát - Pandas - Vizualizácia dát v Pythone

Metódy

Kombinovanie dát je kľúčovou súčasťou analýzy, najmä ak pracujeme s rôznymi zdrojmi dát alebo potrebujeme obohatiť existujúci dataset o ďalšie informácie. Ukážeme si metódy, ktoré nám kombinovanie týchto dát umožňujú.

concat()

Metóda concat() umožňuje spojiť niekoľko dataframov pozdĺž riadkov alebo stĺpcov. Spájanie prebieha bez ohľadu na spoločné kľúče alebo indexy.

Vyberieme si zamestnancov z dvoch oddelení - Cardiology a Neurology:

cardiology = df[df['Department'] == 'Cardiology']
neurology = df[df['Department'] == 'Neurology']

Tieto dva dataframy teraz spojíme dohromady:

joined_df = pd.concat([cardiology, neurology])
joined_df

Vznikol nám dataframe so zamestnancami z oboch oddelení:

Spojenie dvoch dataframov pomocou concat - Pandas - Vizualizácia dát v Pythone

merge()

Pomocou metódy merge() zlúčime dva dataframy na základe spoločných stĺpcov alebo indexov. Možnosti pre spájanie dát určuje parameter how.

Parameter how

Parameter how prijíma niekoľko hodnôt:

  • left: Zachová všetky riadky z ľavého dataframu a zodpovedajúce riadky z pravého dataframu. Pokiaľ nie je nájdená zhoda, vyplní hodnotou NaN.
  • right: Zachová všetky riadky z pravého dataframu a zodpovedajúce riadky z ľavého dataframu. Pokiaľ nie je nájdená zhoda, vyplní hodnotou NaN.
  • inner: Zachová iba riadky so zodpovedajúcimi hodnotami v oboch dataframoch. Riadky bez zhody sú vyradené.
  • outer: Zachová všetky riadky z oboch dataframov. Riadky bez zodpovedajúcej hodnoty v druhom dataframe sú vyplnené hodnotou NaN.
Tvorba nového dataframe

Vyskúšame si teraz prácu s merge(). Najprv si vytvoríme nový dataframe, ktorý bude obsahovať iba EmployeeID a nový stĺpec PreferredTransport:

transport = {
    'EmployeeID': [1414939, 1200302, 1060315, 1812428, 1313919],
    'PreferredTransport': ['Car', 'Bike', 'Public Transport', 'Walk', 'Car']
}
df_transport = pd.DataFrame(transport)

Stĺpec EmployeeID bude slúžiť ako spojenie medzi dvoma dataframami. Vytvorili sme päť záznamov s hodnotami EmployeeID reálnych zamestnancov z nášho datasetu. V stĺpci PreferredTransport sa bude nachádzať preferovaný spôsob dopravy do práce.

Teraz si tento nový dataframe zobrazíme:

df_transport

Po spustení kódu vidíme:

Zobrazenie dataframe s dopravou - Pandas - Vizualizácia dát v Pythone
Hodnota left v parametri how

Metódu merge() si teraz vyskúšame s vložením hodnoty left do parametra how:

merged_df = pd.merge(df, df_transport, on='EmployeeID', how='left')
merged_df[['EmployeeID', 'PreferredTransport', 'Age']]

Výstupom bude opäť nový dataframe, ktorý však obsahuje spojenie dvoch dataframov - df a df_transport. Pri využití merge() sme postupne v parametroch on a how odovzdali oba dataframy.

Parameter on určuje stĺpec na ktorom oba dataframy prepájame a parameter how spôsob, akým prepájame.

Zobrazené dáta teraz vyzerajú takto:

Prepojenie dvoch dataframov – left - Pandas - Vizualizácia dát v Pythone

Všimnime si, že nie všetky hodnoty sa vyplnili. Dôvodom je, že sme použili spôsob prepojenia left. Použili sa tak dáta z dataframu df a zhoda sa nenašla všade, preto väčšina dát má hodnotu NaN.

Hodnota inner v parametri how

Vyskúšajme si teraz to isté, ale s využitím hodnoty inner. Zmeňme si ešte názov premennej dataframe na merged_df_inner (ten pôvodný budeme ešte potrebovať):

merged_df_inner = pd.merge(df, df_transport, on='EmployeeID', how='inner')
merged_df_inner[['EmployeeID', 'PreferredTransport', 'Age']]

Dostaneme teraz iba zamestnancov, kde sa podarilo prepojenie:

Prepojenie dvoch dataframov – inner - Pandas - Vizualizácia dát v Pythone

join()

Metóda join() nám umožní spojiť dva dataframy podľa indexov. Je všeobecne jednoduchšie na použitie ako merge() a vhodné, ak chceme pridať ďalšie stĺpce na základe zhodných indexov.

Pripojme si informácie o firemnom členstve zamestnancov v klube zdravia. Klub zdravia bude charakterizovaný stĺpcom HealthClubMembership, ktorý bude uložený v samostatnom dataframe:

health_club_data = {
    'HealthClubMembership': ['Yes', 'No', 'Yes', 'No', 'Yes']
}

df_health_club = pd.DataFrame(health_club_data).set_index(neurology.index[:5])

Dataframu df_health_club sme nastavili správne indexy využitím metódy set_index(). Indexy sme vybrali ako prvých päť indexov z dataframu neurology.

Následne pomocou metódy join() vytvoríme nový dataframe prepojený s dataframom neurology:

joined_df = neurology.join(df_health_club)
joined_df[['EmployeeID','Age','HealthClubMembership','Department']].head(7)

Výstupom bude prvých sedem zamestnancov z oddelenia neurology spoločne s informáciou, či sú v klube zdraví alebo nie:

Prepojenie s využitím metódy join - Pandas - Vizualizácia dát v Pythone

Nenájdený index sa opäť vyplní hodnotou NaN.

combine_first()

Metóda combine_first() sa používa na doplnenie chýbajúcich hodnôt v jednom dataframe hodnotami z iného dataframu. Pri použití sa zachová štruktúra prvého dataframu, ale kombinujú sa dostupné informácie z oboch dataframov.

Vyskúšame si teraz metódu combine_first() na doplnenie niekoľkých hodnôt, ktoré sme nevyplnili pri použití merge() v stĺpci PreferredTransport. Zobrazíme si najskôr znovu tento dataframe:

merged_df[['EmployeeID', 'PreferredTransport', 'Age']].head(10)

Dostaneme tento výstup:

Zobrazenie desiatich hodnôt z dataframu - Pandas - Vizualizácia dát v Pythone

Zobrazili sme si prvých desať riadkov. Vidíme, že niektoré riadky majú hodnotu NaN. Tento problém teraz vyriešime.

Najprv si pripravíme dáta a z nich vytvoríme dataframe:

transport = {
    'PreferredTransport': [None, None, None, 'Public Transport', None, 'Car','Bus','Plane','Walk','Bike']
}
df_transport = pd.DataFrame(transport)

Následne dataframu merged_df nastavíme pre stĺpec PreferredTransport hodnoty z dataframu df_transport využitím metódy combine_first a zobrazíme prvých desať riadkov:

merged_df['PreferredTransport'] = merged_df['PreferredTransport'].combine_first(df_transport['PreferredTransport'])
merged_df[['EmployeeID', 'PreferredTransport', 'Age']].head(10)

Vo výsledku teda dostaneme náš pôvodný dataframe merged_df rozšírený o nové hodnoty, ktoré boli doplnené podľa indexu:

Znázornenie využitia metódy combine_first - Pandas - Vizualizácia dát v Pythone

V našich dátach transport sme nastavili niektoré hodnoty PreferredTransport na None. Všimnime si, že táto zmena neprebehla, pretože metóda combine_first() doplní iba prázdne hodnoty.

update()

Pomocou metódy update() môžeme aktualizovať hodnoty v jednom dataframe na základe iného dataframu. Poďme si to vyskúšať a aktualizovať mesačné platy a vek pre zamestnancov z oddelenia Cardiology. Najprv sa pozrime, ako vyzerá prvých päť zamestnancov:

cardiology[['Age','MonthlyIncome']].head()

Výsledok:

Zobrazenie prvých piatich záznamov z dataframu - Pandas - Vizualizácia dát v Pythone

Upravíme teraz zamestnancov na indexoch 0 a 29. Pripravíme si dáta a vytvoríme z nich dataframe:

updated_data = {
    'Age': [42,47],
    'MonthlyIncome': [6050, 19000]
}
updated_df = pd.DataFrame(updated_data, index=[0, 29])

Museli sme správne nastaviť indexy, pretože podľa nich bude update() prebiehať.

Nakoniec zavoláme metódu update() a zobrazíme opäť dáta:

cardiology.update(updated_df)
cardiology[['Age','MonthlyIncome']].head()

Výsledkom bude zostarnutie dvoch zamestnancov a zvýšenie ich platu:

Použitie metódy update a zobrazenie výsledkov - Pandas - Vizualizácia dát v Pythone

V nasledujúcej lekcii, Pandas - Spracovanie chýbajúcich hodnôt, si ukážeme užitočné metódy na spracovanie chýbajúcich hodnôt v dátach.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 3x (58.73 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python

 

Ako sa ti páči článok?
Pred uložením hodnotenia, popíš prosím autorovi, čo je zleZnakov 0 z 50-500
Predchádzajúci článok
Pandas - Matematické a štatistické metódy
Všetky články v sekcii
Pandas - Vizualizácia dát v Pythone
Preskočiť článok
(neodporúčame)
Pandas - Spracovanie chýbajúcich hodnôt
Článok pre vás napísal Adam Hamšík
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
.
Aktivity