データ分析で欠損(NaN
)処理時に0
で埋めたり、平均値で埋めたり、drop
したり、前の値を引き継いだり、、というのはよくあります。
が、集計時に、欠損をそのまま欠損として渡す、というのが見当たらなかったのでメモ。
0. ライブラリインポート & サンプルデータ設定
import pandas as pd
import numpy as np
df = pd.DataFrame({'C1': [1, np.nan, np.nan],
'C2': [2, 1, 3],
'C3': [np.nan, np.nan, 1]})
すると、こんな感じに:
df
# C1 C2 C3
#0 1.0 2 NaN
#1 NaN 1 NaN
#2 NaN 3 1.0
1. 課題設定
-
df
のC1
列に対してNaN
を無視して加算(=NaN
をスキップして加算) -
df
のC1
列に対してNaN
を無視せず加算(=NaN
が1つでもあったら、NaN
を返す)
2-1. NaN
を無視して加算
df[['C1']].sum(skipna=True)
#C1 1.0
#dtype: float64
となって、NaN
でないところを取り出せています。念のためNaN
が含まれない列の場合は
df[['C2']].sum(skipna=True)
#C2 6
#dtype: int64
となって、2+1+3=6
がきちんと計算されていますね。
2-2. NaN
を無視せず加算
df[['C1']].sum(skipna=False)
#C1 NaN
#dtype: float64
となって、NaN
を直視し、NaN
が返されます。例によって、全て数字が入っている列は、、
df[['C2']].sum(skipna=False)
#C2 6
#dtype: int64
となって2-2
と同じ結果が得られていますね。