用語比較
dropnaとfillnaの違い
欠損値の行を削除するか、値で埋めるか(Python3データ分析)
dropnaとfillnaの違いは欠損値(NaN)を見つけたあとの動きで、dropna()は欠損データを持つ行を削除し、fillna()は欠損データを指定した値で埋めます。
4行のDataFrameの例では、dropna(how="any")は1行だけを残し、fillna(value=5)は4行のまま欠損の3マスを5.0にします。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
dropna()とfillna()の要点
dropna()
欠損データを持つ行を削除する。公式の例のdropna(how="any")では、欠損を1つでも含む行が消え、4行のうち1行だけが残る。
fillna()
欠損データを指定した値で埋める。公式の例のfillna(value=5)では、行は4行のまま、欠損の3マスが5.0になる。
違いを表で確認
| 比較軸 | dropna() | fillna() |
|---|---|---|
| 欠損値への動き | 欠損を持つ行を削除する | 欠損を指定の値で置き換える |
| 公式の例での結果の行数 | 4行のうち、欠損のない2013-01-02の1行だけが残る | 4行のまま変わらない |
| 公式の例での欠損の残り方 | 残った行に欠損はない | 欠損だった3マス(F列の1つ、E列の2つ)が5.0になる |
| 引数(公式の例) | how="any"(欠損を1つでも含む行を削除) | value=5(欠損を埋める値) |
Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
欠損のある行を、分析から外したい人
欠損を含む行そのものが不要で、残りの完全な行だけで集計したい場面です。行ごと取り除くのでdropnaを使います。行数が減るので、何行残るかを確かめます。
行数を減らさず、欠損に代わりの値を入れたい人
すべての行を残したまま、欠損のマスに決めた値を入れたい場面です。値を指定して埋めるのでfillnaを使います。公式の例のvalue=5のように、埋める値は引数で渡します。
どのマスが欠損なのかを、先に見たい人
削除も補完もせず、欠損の位置だけを知りたい場面です。公式は、pd.isna(df)がNaNの位置を真偽値のマスクで返すと説明しています。dropnaやfillnaの前に使うと、何が起きるかを予想できます。
具体例で使い分ける
例 1
4行のDataFrameに dropna(how="any") を使う
公式の例です。df1は4行(2013-01-01から2013-01-04)で、欠損は3つあります。F列の2013-01-01、E列の2013-01-03と2013-01-04です。この表に df1.dropna(how="any") を使ったときの結果を追います。
- 2013-01-01の行は、F列が欠損です。1つでも欠損があるので、行ごと削除されます。
- 2013-01-03と2013-01-04の行は、E列が欠損です。この2行も削除されます。
- 欠損のない2013-01-02の1行だけが残り、結果は1行になります。
結論: dropna(how="any")は、欠損を1つでも含む行を消します。公式の例では、4行が1行に減ります。
例 2
同じ表に fillna(value=5) を使う
同じdf1に、df1.fillna(value=5) を使います。
- 欠損の3マス(2013-01-01のF列、2013-01-03のE列、2013-01-04のE列)が、5.0に置き換わります。
- 欠損のなかったマスの値は、変わりません。
- 行は削除されないので、結果は4行のままです。
結論: fillna(value=5)は、行を残したまま、欠損を5.0で埋めます。公式の例では、行数は4行のままです。
問題文から答えを選ぶ手順
- 1
欠損のある行を、残すか外すかを決める
外してよいならdropna、残したいならfillnaです。
- 2
dropnaなら、残る行を数える
how="any"は、欠損を1つでも含む行を削除します。欠損のない行だけが残ります。
- 3
fillnaなら、埋める値と埋まるマスを書き出す
引数のvalueで指定した値が、欠損のマスだけに入ります。行数は変わりません。
試験での見分け方
- 1dropna() は、欠損データを持つ行を削除する。how="any" では、欠損を1つでも含む行が対象になる。
- 2fillna() は、欠損データを指定した値で埋める。行数は変わらない。
- 3欠損の位置を調べるには pd.isna(df) を使う。
NaNの位置がTrueの真偽値のマスクが返る。
誤答しやすい選択肢
dropna(how="any") は、欠損のマスだけを消すと考える
修正: dropnaが削除するのは、欠損を持つ行です。公式の説明は「欠損データを持つ行を落とす」です。公式の例では、欠損が3つでも、消えるのは3つの行です。
fillnaの結果の行数が、dropnaと同じになると考える
修正: fillnaは行を削除しません。公式の例では4行のままです。dropna(how="any")は1行になりました。
pd.isna(df) が、欠損を埋めた表を返すと考える
修正: pd.isna(df) が返すのは、NaNの位置をTrueとした真偽値のマスクです。値を埋めるのはfillnaです。
確認問題
Q1DataFrameの、欠損データを持つ行を削除するメソッドは?
答え: dropna()
DataFrame.dropna()は、欠損データを持つ行を削除します。欠損を指定の値で埋めるのはfillna()です。
Q24行のDataFrameで、2013-01-01のF列、2013-01-03のE列、2013-01-04のE列が欠損のとき、dropna(how="any") を使うと何行残るか?
答え: 1行(2013-01-02の行)
欠損を1つでも含む3行が削除され、欠損のない2013-01-02の1行だけが残ります。
Q3同じDataFrameに fillna(value=5) を使うと、行数と、欠損だったマスの値はどうなるか?
答え: 行数は4行のままで、欠損だった3マスが5.0になる
fillnaは行を削除せず、欠損のマスだけを指定の値で埋めます。
到達チェック
- dropnaとfillnaの、欠損値への動き(行の削除か、値で埋めるか)を言い分けられる
- 公式の4行の例で、dropna(how="any")の結果が1行になる理由を説明できる
- pd.isna(df)が返すものを説明できる
関連ページで確認する
同じ資格で次に知りたいこと
- SeriesとDataFrameの違い|1次元のラベル付き配列か、行と列の表か(Python3データ分析)
pandasのSeriesとDataFrameの違いを、次元(1次元か2次元か)と作り方で整理します。pandas公式「10 minutes to pandas」の例で、リストから作るSeries、列を選ぶとSeriesになる点を確認。確認問題つき。
- locとilocの違い|ラベルで選ぶか、位置で選ぶか(Python3データ分析)
pandasのlocとilocの違いを、選び方(ラベルか整数の位置か)とスライスの終点の扱いで整理します。pandas公式ドキュメントの記述、出力を読む例、
KeyErrorとIndexErrorの違い、確認問題つき。 - AxesとAxisの違い|描画領域のAxesと、目盛りを担うAxis(Python3データ分析のMatplotlib)
Matplotlibの Axes と Axis の違いを、役割・個数・ラベルや目盛りの設定先で整理します。公式のQuick start guideで照合した、plt.subplots(2, 2) のとき何個になるかを数える例と確認問題つき。
よくある質問
Qdropnaとは?
pandasで、欠損データを持つ行を削除するメソッドです。公式の例では、dropna(how="any")で、欠損を1つでも含む行が削除されます。
Qfillnaとは?
pandasで、欠損データを指定した値で埋めるメソッドです。公式の例では、fillna(value=5)で欠損のマスが5.0になります。
Qdropnaとfillnaの違いは?
欠損値を見つけたあとの動きです。dropnaは欠損を持つ行を削除し、fillnaは行を残して欠損を指定の値で埋めます。
Q欠損の位置を調べるには?
pd.isna(df)を使います。NaNの位置をTrueとした真偽値のマスクが返ります。
Qデータ分析試験の範囲?
本サイトの第4章pandasの「欠損値と統計」で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
