Pythonのデータ分析ライブラリであるpandasを使った欠損値の扱い方について解説します。
pandasで欠損値をどのように扱えば良いですか?
pandasでは、nan、none、naなどの欠損値を効率的に扱うことができます。具体的には、fillnaメソッドで欠損値を埋めたり、dropnaメソッドで欠損値を含む行や列を削除することができます。
pandasでの欠損値の扱い方
pandasでは、欠損値をnan、none、naとして表現します。これらは、デフォルトで同じ意味を持っています。欠損値は、数値、文字列、日付などのデータ型に関わらず扱うことができます。
具体的には、以下のように欠損値を表現します。
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [None, 'foo', 'bar'],
'C': [pd.Timestamp('2022-01-01'), pd.Timestamp('2022-01-02'), pd.NaT]
})
上記の例では、A
列にnanを、B
列にnoneを、C
列にnaをそれぞれ含むデータフレームを作成しています。また、日付の場合はpd.NaTを使用します。
欠損値の種類
pandasで扱える欠損値は、以下の3種類です。
- nan:Not a Numberの略称で、浮動小数点数の場合に使われます。
- none:Pythonのオブジェクトが持つデフォルト値で、オブジェクト型(文字列やリストなど)の場合に使われます。
- na:not availableの略称で、すべてのデータ型に対して使われます。
それぞれの欠損値の特徴は以下の通りです。
- nan:数値データに対してよく使われます。算術演算でnanを含むと、演算結果はnanになります。また、NaNという表記もあります。
- none:オブジェクト型(文字列やリストなど)の場合に使われます。演算でnoneを含む場合は、エラーが発生します。
- na:すべてのデータ型に対して使われます。文字列型の場合はnp.nanと同様にnanとして扱われます。また、日付型の場合はpd.NaTという定数があります。
欠損値の種類について理解しておくことで、適切な欠損値の扱い方を選択することができます。
欠損値の操作方法
欠損値を含むデータを操作する際には、pandasのfillnaメソッドを使うことができます。fillnaメソッドは、欠損値を指定した値で埋めたり、直前の値で埋めたりすることができます。
具体的には、以下のようにfillnaメソッドを使用します。
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [None, 'foo', 'bar'],
'C': [pd.Timestamp('2022-01-01'), pd.Timestamp('2022-01-02'), pd.NaT]
})
# 欠損値を指定した値で埋める場合
df.fillna(0)
# 直前の値で埋める場合
df.fillna(method='ffill')
上記の例では、fillnaメソッドを使って欠損値をそれぞれ0や直前の値で埋めています。また、method引数に’ffill’を指定することで、直前の値で埋めることができます。
他にも、欠損値を補完するための手法として、欠損値が多い場合には平均値や中央値、最頻値などの代表値で補完する方法もあります。ただし、欠損値が多い場合には注意が必要です。
欠損値を含む行や列の削除方法
欠損値を含む行や列の削除方法 pandasのdropnaメソッドを使うことで、欠損値を含む行や列を削除することができます。また、threshパラメータを指定することで、ある程度の欠損値を含む行や列は削除しないようにすることができます。
具体的には、以下のようにdropnaメソッドを使用します。
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [None, 'foo', 'bar'],
'C': [pd.Timestamp('2022-01-01'), pd.Timestamp('2022-01-02'), pd.NaT]
})
# 欠損値を含む行を削除する場合
df.dropna()
# 欠損値を含む列を削除する場合
df.dropna(axis=1)
# ある程度の欠損値を含む行を削除しない場合
df.dropna(thresh=2)
上記の例では、dropnaメソッドを使って欠損値を含む行や列を削除しています。また、threshパラメータに2を指定することで、2つ以上の欠損値がある行だけを削除するようにしています。
ただし、欠損値を含むデータを削除する場合には、削除したことで情報が失われるため、注意が必要です。また、欠損値を含む行や列が多い場合には、他の手法を検討することが望ましいです。
サンプルプログラムを使った解説
以下のサンプルプログラムでは、pandasを使って欠損値を含むデータを操作する方法を紹介します。
import pandas as pd
import numpy as np
# サンプルデータを作成
df = pd.DataFrame({
'A': [1, 2, np.nan, 4, 5],
'B': [None, 'foo', 'bar', 'baz', 'qux'],
'C': [pd.Timestamp('2022-01-01'), pd.Timestamp('2022-01-02'), pd.NaT, pd.Timestamp('2022-01-04'), pd.Timestamp('2022-01-05')]
})
print(df)
# 欠損値を含む行を削除
df = df.dropna()
print(df)
# 欠損値を指定した値で埋める
df = pd.DataFrame({
'A': [1, 2, np.nan, 4, 5],
'B': [None, 'foo', 'bar', 'baz', 'qux'],
'C': [pd.Timestamp('2022-01-01'), pd.Timestamp('2022-01-02'), pd.NaT, pd.Timestamp('2022-01-04'), pd.Timestamp('2022-01-05')]
})
df = df.fillna(0)
print(df)
# 直前の値で埋める
df = pd.DataFrame({
'A': [1, 2, np.nan, 4, 5],
'B': [None, 'foo', 'bar', 'baz', 'qux'],
'C': [pd.Timestamp('2022-01-01'), pd.Timestamp('2022-01-02'), pd.NaT, pd.Timestamp('2022-01-04'), pd.Timestamp('2022-01-05')]
})
df = df.fillna(method='ffill')
print(df)
まず、サンプルデータを作成しています。次に、欠損値を含む行を削除する方法や、欠損値を指定した値で埋めたり、直前の値で埋めたりする方法を紹介しています。それぞれの結果を表示しています。
このように、pandasのfillnaメソッドやdropnaメソッドを使うことで、欠損値を含むデータを効率的に扱うことができます。
リスキリングでキャリアアップしてみませんか?
リスキリング(学び直し)は、経済産業省が推奨しており、
今だけ、最大70%のキャッシュバックを受けることができます。
最大70%の給付金が出るおすすめのプログラミングスクール!
国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!
興味のある方はすぐに確認しましょう。
まとめ
Pythonのデータ分析ライブラリであるpandasを使った欠損値の扱い方について解説しました。
- pandasでは、欠損値をnan、none、naとして表現することができる。
- 欠損値を含むデータを扱う場合は、fillnaメソッドやdropnaメソッドを使用することができる。
- fillnaメソッドは、欠損値を指定した値や直前の値で埋めることができる。
- dropnaメソッドは、欠損値を含む行や列を削除することができる。
良くまとまっていて分かりやすかったです。特に、欠損値の種類や、fillnaメソッドとdropnaメソッドの使い分けなど、具体的な例も示していただいたので、理解しやすかったです。
欠損値を含むデータの扱い方には、様々な方法があります。適切な方法を選択することで、正確な分析結果を得ることができます。また、欠損値が多い場合には、他の手法も検討することが望ましいです。
コメント