Úprava sloupců DataFramu
V předchozím cvičení jsi odfiltroval/a řádky, které neodpovídaly formátu jména. Teď tě manažerka požádala, abys na základě té práce vytvořil/a dva nové sloupce – first_name a last_name. Sloupec VOTER_NAME rozděl podle mezer na jednotlivá slova. Poslední slovo bude last_name, všechna ostatní slova pak first_name. V tomto cvičení využiješ nové funkce: .split(), .size() a .getItem(). Metoda .getItem(index) přijímá celé číslo a vrátí odpovídající prvek ze sloupce. Funkce .split() a .size() jsou součástí knihovny pyspark.sql.functions.
Měj na paměti, že tyto operace jsou vždy do určité míry specifické pro daný případ použití. Důležitější než konkrétní podoba formátu je to, aby data formátu odpovídala. Čištění dat zřídkakdy slouží jen jednomu člověku – soulad s definovaným formátem usnadňuje sdílení dat v budoucnu (například Pavel se nemusí starat o jména, protože Markéta dataset už vyčistila).
Filtrovaný DataFrame voter_df z předchozího cvičení je k dispozici pod názvem voter_df. Knihovna pyspark.sql.functions je dostupná pod aliasem F.
Toto cvičení je součástí kurzu
Cleaning Data with PySpark
Pokyny k cvičení
- Přidej nový sloupec
splits, který bude obsahovat seznam možných částí jména. - Pomocí metody
getItem()vytvoř nový sloupecfirst_name. - Vezmi poslední prvek seznamu
splitsa vytvoř sloupeclast_name. - Odstraň sloupec
splitsa zobraz aktualizovanývoter_df.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# Add a new column called splits separated on whitespace
voter_df = voter_df.withColumn(____, F.____(voter_df.VOTER_NAME, '\s+'))
# Create a new column called first_name based on the first item in splits
voter_df = voter_df.withColumn(____, voter_df.splits.getItem(____)
# Get the last entry of the splits list and create a column called last_name
voter_df = voter_df.withColumn(____, voter_df.splits.getItem(F.____('splits') - ____))
# Drop the splits column
voter_df = voter_df.____('splits')
# Show the voter_df DataFrame
voter_df.show()