データ分析で欠損(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と同じ結果が得られていますね。