今回はDataFrameの削除に使う関数の解説です。
コードと画像をたくさん使っています。参考になれば幸いです。
行・列の削除に使える関数
関数 | 処理 |
---|---|
df.pop(列名) | 1列を削除する |
del df[列名] | 複数列を削除できる。df.loc[行名]は使えない |
df.drop() | 複数行・列を削除できる 詳しくはコチラの記事へ |
df.dropna() | NaNのセルがある行・列を削除 この記事で解説します。 |
df.drop_duplicates() | 重複列の削除 詳しくはコチラの記事へ |
pop
、del
、drop
の3つの基本的な使い方は以下の記事でまとめています。
こんにちは、今回はpandasのDataFrameで行や列を削除する方法を解説していきます。 それぞれの役割やメリットを確認しながら基本的なポイントを押さえていきましょう。 [itemlink post_id="4429"] […]
この記事ではdropna関数に関して解説していきます。
dropna関数の引数
この関数は空(NaN)になっているセルがある行や列を削除します。行方向にみるのか列方向に見るのかは選択できます。
引数 | デフォルト値 | 処理 |
---|---|---|
axis | 0(行方向) | 1で列方向 |
how | 'any' | 'any' は少なくとも一つNaNがある行や列を削除する'all' はすべてNaNの行や列を削除する |
thresh | なし | 整数を渡す 例)2のときは欠損していないセルが2つ以上の行・列を残す |
subset | なし | 列名のリストを渡すと、その列からNAをさがして削除する |
inplace | False | True でもとのDataFrameを変更する |
それぞれの引数の解説では以下のデータフレームを使います。
1 2 3 4 5 6 7 8 9 10 11 |
import pandas as pd import numpy as np df = pd.DataFrame( {'name': ['Tom', 'Bob', 'Ken', 'Elis', 'Nancy'], 'class': ['A', 'B', np.nan, pd.NaT, pd.NaT], 'height': [170, np.nan, np.nan, np.nan, np.nan], 'weight': [75, 81, 72, np.nan, np.nan], 'address': ['USA', None, None, None, None]}) df |

NaNには、pd.NaT
、None
、np.nan
の3種類があります。(ほかにもあるかもしれませんが今回はこれです。)
pd
はpandas、np
はnumpyの意味です。
dropna関数は3つとものNaNに対して正しく処理してくれます。
axisとhowの役割
基本的にNaNが1つもない行や列しか残りません。
一つでもあったら消されます。
行方向に削除
1 2 3 4 5 |
#デフォルトで行方向 df.dropna() #以下でも同じ df.dropna(axis=0) |

列方向に削除
1 |
df.dropna(axis=1) |

how=’all’のとき
全て空(NaN)の行や列を削除します。
1 2 3 4 5 6 7 8 9 |
#行方向に見る df.dropna(how='all') #以下も行方向 df.dropna(axis=0, how='all') #列方向に見る df.dropna(axis=1, how='all') |
今回の例で使っているDataFrameはすべて空の行や列がないので削除されません。
inplaceの役割
もしdropna関数を使ったのに削除されていない場合はこの引数を見てみましょう。
デフォルト(False)のとき
このとき元のDataFrameは変更されません。
つまり、削除されていないもとのDataFrameが表示されます。
1 2 3 4 5 |
#NaNの行を削除 df.dropna() #表示 df |

Trueのとき
このときは元のDataFrameが変更されています。
1 2 3 4 5 |
#NaNの行を削除 df.dropna(inplace=True) #表示 df |

元のDataFremeを変更したくないけど、削除したものを残したい場合は別の変数に代入しておきます。
以下のdrop関数の記事のinplaceの部分にコードが書いています。
こんにちは、今回はdrop関数に関して詳しくまとめていきたいと思います。 DataFrameの整形で非常に役に立つ関数なのでぜひ使い来ないしたいですね。 特に、dropを使ったのに削除できなかったときの対処法も書いています。 […]
threshの役割
- 整数を渡す。
thresh=2
なら、NaNでないセルが2つ以上ある行や列を残す。- 行方向に削除するときは
axis=0
でもOK
1 2 3 4 5 |
#行方向 df.dropna(thresh=2) #列方向 df.dropna(axis=1, thresh=2) |


subsetの役割
- 列名か行名のリストを渡す。
- その列または行のNaNを削除する。
- 指定外の列や行にはNaNが残ることもある。
1 2 3 4 5 |
#行方向 df.dropna(subset=['name', 'class']) #列方向 df.dropna(subset=[0, 2], axis=1) |


まとめ
今回はNaNを消す関数の使い方をまとめました。
NaNの種類が3つもあることを初めて知りました!
削除に困っている方の参考になれば幸いです。