PythonでSeriesをダミー変数に変換し、NaN値を除外する方法
pandasのSeriesに含まれるカテゴリカルデータをダミー変数(one-hotエンコーディング)に変換する際、NaN値をどのように扱うかは重要なポイントです。この記事では、pd.get_dummies()関数を使ってSeriesをダミー変数に変換し、dummy_na=Falseを指定することでNaN値を除外する方法を解説します。
期待される出力
例えば、「Male」と「Female」からなるSeriesをダミー変数に変換すると、以下のような結果が得られます。
Female Male 0 0 1 1 1 0 2 0 1 3 1 0 4 0 1 5 0 0 6 1 0 7 1 0
注目すべきはインデックス5の行です。元のSeriesではNaN値だったため、「Female」「Male」どちらの列も0になっています。dummy_na=Falseを設定することで、NaN値は新しい列として作成されず、単純にすべてのカテゴリで0として扱われます。
解決手順
「Male」と「Female」の要素を含むリストを作成し、pandasのSeriesに代入します。
Seriesに対して
pd.get_dummies()関数を適用し、引数dummy_naをFalseに設定します。
pd.get_dummies(series, dummy_na=False)
コード例
以下のコードで実際の動作を確認してみましょう。
import pandas as pd
import numpy as np
gender = ['Male','Female','Male','Female','Male',np.nan,'Female','Female']
series = pd.Series(gender)
print("Series is:\n",series)
print("Dummy code is:\n", pd.get_dummies(series, dummy_na=False))実行結果
Series is: 0 Male 1 Female 2 Male 3 Female 4 Male 5 NaN 6 Female 7 Female dtype: object Dummy code is: Female Male 0 0 1 1 1 0 2 0 1 3 1 0 4 0 1 5 0 0 6 1 0 7 1 0
補足:dummy_na=Trueとの違い
もしdummy_na=Trueを指定した場合は、NaN値専用の「NaN」列が新たに作成され、欠損値のある行ではその列が1になります。機械学習の前処理では、欠損値の情報を保持したい場合にTrueを、欠損値を単に無視したい場合にはFalseを選択するとよいでしょう。
-
Pythonで指定したリストをネストされたリスト(リストのリスト)に変換する方法
Pythonでは、リスト内の各要素を、それ自体がリストである形式へと変換したいケースがあります。つまり、要素そのものがリストになっている「ネストされたリスト(リストのリスト)」を作成するということです。本記事では、代表的な2つのアプローチ——反復処理を使う方法とastモジュールを使う方法——について、具体的なコード例とともに解説します。反復処理(イテレーション)を使う方法最も基本的なアプローチは、リストの各要素を1つずつ取り出し、それぞれをリスト形式に変換していく方法です。一時的なリスト(temp)を活用しながら変換を行い、最終的にすべての要素をまとめて、目的となる「リストのリスト」を生成しま
-
【Python入門】秒を「時:分:秒」形式に変換する3つの方法
はじめに この記事では、「与えられた秒数を時・分・秒の形式に変換する」という問題に対する解決策を、3つの異なるアプローチとともに分かりやすく解説します。プログラムで経過時間やタイマーを扱う際によく使われる処理なので、ぜひ参考にしてください。 アプローチ1: 算術演算による力任せの方法(ブルートフォース) 剰余演算子(%)と整数除算演算子(//)を組み合わせることで、24時間以内の秒数から時・分・秒をそれぞれ求めることができます。ロジックがシンプルで、標準モジュールに依存しないのが特徴です。 コード例 def convert(seconds): seconds = seconds %