Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】Pandas DataFrameからnull(欠損値)行を削除する方法|dropna()の使い方

PandasのDataFrameからnull(NaN)行を削除するには、dropna()メソッドを使用します。この記事では、NaNを含むCSVファイルを読み込み、dropna()で欠損値を含む行を取り除くまでの手順を、サンプルコードと実行結果とともにわかりやすく解説します。

前提:NaNを含むCSVファイル

今回の例では、一部にNaN(null値)が含まれる以下のようなCSVファイル(CarRecords.csv)を使用します。

【Python】Pandas DataFrameからnull(欠損値)行を削除する方法|dropna()の使い方

手順1:read_csv()でCSVファイルを読み込む

まずpandasをインポートし、read_csv()を使ってCSVファイルを読み込みます。ここではデスクトップ上に保存されたファイルを指定しています。

dataFrame = pd.read_csv("C:/Users/amit_/Desktop/CarRecords.csv")

手順2:dropna()でnull行を削除する

続いて、dropna()を呼び出すだけで、NaNを1つでも含む行がすべて削除されます。

dataFrame = dataFrame.dropna()

完全なサンプルコード

以下が全体のコードです。削除前後でDataFrameの形状(行数・列数)も確認できるようにしています。

import pandas as pd

# CSVファイルを読み込む
dataFrame = pd.read_csv("C:/Users/amit_/Desktop/CarRecords.csv")
print("DataFrame...
",dataFrame)

# DataFrameの行数と列数を確認
print("
Number of rows and column in our DataFrame = ",dataFrame.shape)

# null(NaN)を含む行を削除
dataFrame = dataFrame.dropna()
print("
DataFrame after removing null values...
",dataFrame)
print("
(Updated) Number of rows and column in our DataFrame = ",dataFrame.shape)

実行結果

上記のコードを実行すると、次のような出力が得られます。

DataFrame...
           Car       Place   UnitsSold
0         Audi   Bangalore        80.0
1      Porsche      Mumbai       110.0
2   RollsRoyce        Pune         NaN
3          BMW       Delhi       200.0
4     Mercedes   Hyderabad        80.0
5  Lamborghini  Chandigarh         NaN
6         Audi      Mumbai         NaN
7     Mercedes        Pune       120.0
8  Lamborghini       Delhi       100.0

Number of rows and column in our DataFrame = (9, 3)

DataFrame after removing null values...
           Car      Place   UnitsSold
0         Audi  Bangalore        80.0
1      Porsche     Mumbai       110.0
3          BMW      Delhi       200.0
4     Mercedes  Hyderabad        80.0
7     Mercedes       Pune       120.0
8  Lamborghini      Delhi       100.0

(Updated) Number of rows and column in our DataFrame = (6, 3)

元のDataFrameは9行でしたが、UnitsSold列がNaNだった2行と6行が削除され、6行になりました。インデックス番号は元のまま維持される点にも注意してください。

補足:dropna()の便利なパラメータ

dropna()はデフォルトで「1つでもNaNを含む行」を削除しますが、引数を指定することで柔軟に挙動を制御できます。

  • how="all":すべての値がNaNである行のみ削除する
  • subset=["列名"]:特定の列のNaNだけを削除対象にする
  • thresh=n:NaN以外の値がn個未満の行を削除する
  • inplace=True:新しいオブジェクトを作らず、元のDataFrameを直接書き換える

たとえば「Car列とPlace列がどちらも揃っている行だけ残したい」場合は、dataFrame.dropna(subset=["Car", "Place"])のように記述します。

まとめ

DataFrameから欠損値(NaN)を含む行を削除したい場合は、dropna()メソッドを使うのが最も簡単です。引数なしで呼び出せばNaNを含む行をすべて削除でき、howやsubsetなどのパラメータを組み合わせれば、より細かい条件でのデータクレンジングも可能になります。

  1. Python Pandas入門 – データフレームから条件に合う行のサブセットを抽出する方法

    Pandasのデータフレームから行のサブセット(一部の行)を取得するには、条件式を使ってデータを絞り込みます。この手法は「ブールインデックス参照」と呼ばれ、データ分析で最もよく使われる操作のひとつです。 使用するCSVファイル ここでは、Microsoft Excelで開いた次のようなCSVファイル(SalesData.csv)を例にします。車種名(Car)、登録価格(Reg_Price)、販売台数(Units)の3つの列を持つデータです。 CSVファイルをデータフレームとして読み込む まず、read_csv()メソッドを使って、CSVファイルのデータをPandasのデータフレームに読み込み

  2. Python Pandas:read_csvのskipinitialspaceでCSV読み込み時の先頭スペースをスキップする方法

    PandasでCSVの先頭スペースをスキップするには?PandasでDataFrameを読み込む際、データの先頭にある余分な空白(初期スペース)を取り除きたい場合は、read_csv()メソッドのskipinitialspaceパラメータを使用します。このパラメータをTrueに設定すると、区切り文字(カンマなど)の直後にある空白が自動的にスキップされます。CSVファイルの中には、カンマの後に不要なスペースが混ざっているケースが少なくありません。そのまま読み込むと、列名や値の先頭に空白が残り、条件検索やグループ化の際にデータが正しく一致しない原因となります。skipinitialspace=Tr