search
LoginSignup
4

More than 3 years have passed since last update.

posted at

updated at

pandasで、行 or 列内に欠損値がある時に、無視して加算・無視せず加算する方法

データ分析で欠損(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. 課題設定

  • dfC1列に対してNaNを無視して加算(=NaNをスキップして加算)
  • dfC1列に対して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と同じ結果が得られていますね。

References

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4