LEVEL 8 ・ 自動化 / Lesson 21

入力ミスのある行だけを抜き出す

空欄・マイナスなど、おかしい行だけを抜き出し、行番号を付けて、確認用ファイルに保存します。

目安 20分 ・ インストール不要

このレッスンが終わったら

「条件を組み合わせて、おかしい行だけを抜き出せる。直す前に、まず見つけて一覧にする」と言える。

STEP 1

できることを見る

入力ミスのあるデータを、ひとつずつ目で探すのは大変です。Pythonに、おかしい行だけを抜き出してもらいましょう。

ここに、入力ミスが混ざった sales_dirty.csv があります。

sales_dirty.csvサンプルファイル
日付,担当,部署,商品,金額
2025-10-01,田中,営業,ノートPC,120000
2025-10-02,佐藤,営業,モニター,
2025-10-03,鈴木,企画,ソフト,48000
2025-10-05,,営業,モニター,35000
2025-10-07,高橋,企画,ノートPC,-120000
2025-10-08,佐藤,営業,ソフト,48000
2025-10-10,鈴木,,モニター,35000
2025-10-12,伊藤,総務,ソフト,48000

空欄や、マイナスの金額が、混ざっています。これを、Pythonで見つけます。

import pandas as pd

df = pd.read_csv("sales_dirty.csv")
print(df)
STEP 2

動かしてみる

入力ミスのあるCSVを読むpandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

空欄の所は、NaN(ナン)と表示されます。「値が入っていない」という意味です。また、金額に空欄があるため、数字が 120000.0 のように、小数の形になっています。

STEP 3

1行ずつ読む

「おかしい行」を、条件で表します。

1行ずつ日本語にしてみる
df["金額"].isna()金額が空欄(NaN)か、調べる。空欄なら True
df["金額"] < 0金額がマイナスか、調べる。マイナスなら True
df["担当"].isna()担当が空欄か、調べる
条件A | 条件BA、または B(どちらかに当てはまれば True)
df[ 条件 ]条件が True の行だけを取り出す

条件をつなぐ | は、「または」でした。次のコードで、4つの条件のどれかに当てはまる行を、抜き出します。

おかしい行だけを抜き出すpandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

日本語にすると

金額が空欄、または金額がマイナス、または担当が空欄、または部署が空欄の行だけを、取り出してください。

8行のうち、4行が、問題のある行でした。

STEP 4

1か所だけ変える

① 行番号を付ける。 Excelで探しやすいように、「元のファイルの何行目か」を付けます。見出しが1行目なので、データは、行番号に2を足した行にあたります。

Excelの行番号を付けるpandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

② 結果をファイルに保存する。 確認用に、errors.csv として保存します。(Excelで開いても文字化けしないように、utf-8-sig を付けます)

エラー行をCSVに保存するpandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

③ 空欄の数を、列ごとに数える。 isna().sum() で、列ごとの空欄の数が分かります。

列ごとの空欄の数pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

④ 問題のない行だけで集計する。 おかしい行を取り除いてから、集計します。drop は、指定した行を取り除きます。

問題のない行だけで集計pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます
STEP 5

自分で書く

お題① 金額がマイナスの行が、何行あるかを表示してください。

お題①:マイナスの行数pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます
ヒントを見る

df[df["金額"] < 0] で、マイナスの行を取り出し、len(...) で数えます。

答えの例を見る
import pandas as pd

df = pd.read_csv("sales_dirty.csv")
print(len(df[df["金額"] < 0]))

お題② 「担当が空欄」または「部署が空欄」の行が、何行あるかを表示してください。

お題②:担当か部署が空欄の行数pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます
ヒントを見る

df[df["担当"].isna() | df["部署"].isna()] の行数を、len(...) で数えます。

答えの例を見る
import pandas as pd

df = pd.read_csv("sales_dirty.csv")
print(len(df[df["担当"].isna() | df["部署"].isna()]))
STEP 6

仕事ならどう使う?