目次
概要
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

コメント