3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-05-31

データ分析で欠損(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

3
5
0

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
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?