DataFrame の列を変更する
前のステップでは、名前らしくない行をフィルタリングしました。これまでの作業を踏まえて、マネージャーから first_name と last_name の2つの新しい列を作成するよう依頼されました。VOTER_NAME 列をスペース文字で分割し、最後の単語を last_name、それ以外のすべてを first_name として扱います。この演習では .split()、.size()、.getItem() といった新しい関数を使います。.getItem(index) は整数を取り、列内の対応する番号の要素を返します。.split() と .size() は pyspark.sql.functions ライブラリにあります。
なお、これらの操作は常にユースケースにある程度依存します。データがある形式に従っていることは、その形式の細部よりも重要な場合が多いです。データクレンジングは一人だけのために行うことはほとんどなく、定義済みの形式に合わせておくと、後で共有しやすくなります(例:Paul は名前を気にする必要がありません—Mary がすでにデータセットをクレンジング済みです)。
前の演習でフィルタ済みの有権者 DataFrame は voter_df として利用可能です。pyspark.sql.functions ライブラリはエイリアス F で利用できます。
この演習はコースの一部です
PySpark でデータをクレンジングする
演習の手順
- 可能な名前のリストを保持する
splitsという新しい列を追加します。 getItem()メソッドを使って、新しい列first_nameを作成します。splitsリストの最後の要素を取得し、last_name列を作成します。splits列を削除し、更新されたvoter_dfを表示します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# 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()