pandas – dropna で欠損値を削除する方法

目次

概要

pandas の dropna で欠損値を削除する方法について解説します。

pandas.DataFrame.dropna

pandas.DataFrame.dropna() は、DataFrame から欠損値を削除します。

DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False)
引数
名前 デフォルト値
axis {0 or ‘index’, 1 or ‘columns’} 0
欠損値をチェックする方向
how {‘any’, ‘all’} ‘any’
欠損値を削除する基準
thresh int, optional
欠損値を削除する基準
subset array-like, optional
欠損値をチェックする対象
inplace bool False
inplace で処理するかどうか

返り値
名前 説明
DataFrame 欠損値を除いた DataFrame

各引数は axis の値によって、以下の意味になります。

axis=0 axis=1
how=”any” その行の1つでも欠損値が含まれる場合は削除する その列の1つでも欠損値が含まれる場合は削除する
how=”all” その行がすべて欠損値の場合は削除する その列がすべて欠損値の場合は削除する
thresh=n その行の欠損値でない値が n 個未満の場合は削除する その列の欠損値でない値が n 個未満の場合は削除する
subset チェックする対象の列のインデックスを指定する チェックする対象の行のインデックスを指定する

axis – NaN をチェックする方向

In [1]:
import pandas as pd
from IPython.display import display

df = pd.DataFrame(
    [
        [None, 2, 3, 4, 5],
        [None, None, 8, 9, 10],
        [11, 12, 13, 14, 15],
        [16, 17, 18, 19, 20],
        [None, 22, 23, 24, None],
    ],
    index=["a", "b", "c", "d", "e"],
    columns=["A", "B", "C", "D", "E"],
)
display(df)

# 行ごと
display(df.dropna(axis=0, how="any"))

# 列ごと
display(df.dropna(axis=1, how="any"))
A B C D E
a NaN 2.0 3 4 5.0
b NaN NaN 8 9 10.0
c 11.0 12.0 13 14 15.0
d 16.0 17.0 18 19 20.0
e NaN 22.0 23 24 NaN
A B C D E
c 11.0 12.0 13 14 15.0
d 16.0 17.0 18 19 20.0
C D
a 3 4
b 8 9
c 13 14
d 18 19
e 23 24

how – 削除する基準を設定する

how で削除する基準を指定します。

  • any: 1つでも NaN があれば、削除します。
  • all: すべて NaN であれば、削除します。
In [2]:
df = pd.DataFrame(
    [
        [None, 2, 3, 4, 5],
        [None, None, 8, 9, 10],
        [11, 12, 13, 14, 15],
        [16, 17, 18, 19, 20],
        [None, None, None, None, None],
    ],
    index=["a", "b", "c", "d", "e"],
    columns=["A", "B", "C", "D", "E"],
)
display(df)

display(df.dropna(how="any"))

display(df.dropna(how="all"))
A B C D E
a NaN 2.0 3.0 4.0 5.0
b NaN NaN 8.0 9.0 10.0
c 11.0 12.0 13.0 14.0 15.0
d 16.0 17.0 18.0 19.0 20.0
e NaN NaN NaN NaN NaN
A B C D E
c 11.0 12.0 13.0 14.0 15.0
d 16.0 17.0 18.0 19.0 20.0
A B C D E
a NaN 2.0 3.0 4.0 5.0
b NaN NaN 8.0 9.0 10.0
c 11.0 12.0 13.0 14.0 15.0
d 16.0 17.0 18.0 19.0 20.0

thresh – 削除する基準

欠損値でない値が thresh 個未満の場合は削除します。

In [3]:
df.dropna(thresh=4)
A B C D E
a NaN 2.0 3.0 4.0 5.0
c 11.0 12.0 13.0 14.0 15.0
d 16.0 17.0 18.0 19.0 20.0

subset – 欠損値をチェックする対象

subset で欠損値をチェックする対象を指定します。

In [4]:
display(df.dropna(subset=["C", "D", "E"]))
A B C D E
a NaN 2.0 3.0 4.0 5.0
b NaN NaN 8.0 9.0 10.0
c 11.0 12.0 13.0 14.0 15.0
d 16.0 17.0 18.0 19.0 20.0

pandas.Series.dropna

pandas.Series.dropna() は、Series から欠損値を削除します。

Series.dropna(self, axis=0, inplace=False, how=None)
引数
名前 デフォルト値
inplace bool False
inplace で処理するかどうか

返り値
名前 説明
Series 欠損値を削除した Series
In [5]:
s = pd.Series([None, None, 8, 9, 10])
print(s)

print(s.dropna())
0     NaN
1     NaN
2     8.0
3     9.0
4    10.0
dtype: float64
2     8.0
3     9.0
4    10.0
dtype: float64

コメント

コメントする

目次