手作業ではなくpandasでデータを整えるのはなぜですか?

pandasでのデータクレンジングには、すべての処理がコードとして残り、翌月のエクスポートデータにも数秒で再実行できるという利点があります。一方、表計算ソフトでの手作業による修正は時間がかかり、作業内容を忘れやすく、監査もできません。

四つの拠点を持つ架空の園芸用品店グループ、ファーンヒル・ガーデンズを想像してください。財務分析担当のトマシュは、オンライン注文の月次CSVを受け取ります。下のサンプルでは、同じ注文が二重に記録され、拠点名には表記の揺れがあり、金額には通貨記号とカンマが含まれています。日付は日から始まる形式と年から始まる形式が混在し、欠損値は空欄、「N/A」、「-」で表されています。手作業で修正すると一日かかり、合計金額も決済事業者のレポートと完全には一致しません。

order_idsiteorder_dateamountpostcode
10231リーズ03/11/2026£1,240.00LS6
10231リーズ03/11/2026£1,240.00LS6
10232リーズ2026-11-0486.50該当なし
10233ヨーク05/11/2026-YO1
10234ハロゲート142

pandasを使ったデータクレンジングは、どのような手順で行いますか?

pandasでデータをクレンジングするには、欠損値を表す値を指定して読み込み、内容を確認し、テキスト表記を統一し、数値と日付を変換し、重複を削除し、残った欠損値の扱いを決めてから、信頼できる合計値と照合します。この順序で進めると、ある修正が別の修正を台無しにするのを防げます。

1. 欠損値を示す記号を指定して読み込みます

pandasのread_csv関数は、ファイルをDataFrameに読み込みます。na_values引数では、空欄など、pandasが標準で欠損値として認識するものに加えて、'N/A'や'-'などの文字列も欠損値として指定できます。ここで指定しておけば、後から探す手間を省けます。

2. 変更する前に状態を確認します

headで先頭の数行を、infoで列の型と欠損していない値の件数を確認し、isnaとsumを組み合わせて列ごとの欠損値の数を確認してください。分かったことを記録してください。Fernhillでは、amountが文字列として保存され、order_dateには複数の形式が混在しています。

3. テキストの表記を統一します

列に文字列メソッドを使います。str.stripで前後の空白を削除し、str.lowerまたはstr.titleで大文字と小文字の表記を統一すると、「 リーズ」「りーず 」「リーズ」を同じ拠点として扱えます。その後、uniqueで一意の値を一覧にし、残っている表記ゆれを確認します。

4. 数値に変換します

str.replaceで通貨記号と桁区切りのカンマを削除し、to_numericで数値に変換します。errors引数をcoerceに設定すると、解析できない値は処理を停止させる代わりに欠損値になります。そのため、該当する行を気付かないまま失うのではなく、件数を数えて確認できます。

5. 日付を変換する

to_datetimeはテキストを適切な日付に変換します。形式が混在している場合は、可能な限り形式を明示するか、英国式の日付にはdayfirstを設定し、errorsをcoerceに設定してください。解析できない日付は、pandasで日付の欠損を表すNaTになります。dayfirstは厳密な規則ではなく優先設定なので、結果を確認してください。

6. 重複を削除する

drop_duplicatesは重複した行を削除します。既定では、すべての列の値が一致した場合にのみ、その行は重複と見なされます。subset引数を使うと、order_idなど、指定した列で重複を判定できます。keepでは、最初と最後のどちらの行を残すかを決めます。

7. 残る不足点への対応を決める

dropnaは欠損値のある行を削除しますが、既定では、いずれかの列に欠損があればその行を削除します。amountなど、本当に必要な列に欠損がある行だけを削除するには、subset引数を使います。あるいは、fillnaで指定した値を使って欠損を埋めます。その後、astypeを使って列の最終的な型を設定します。例えば、siteをカテゴリ型にします。

データのクリーニング作業には、不十分な例と改善した例でどのような違いがありますか?

不十分な処理では、read_csvでファイルを読み込み、引数なしでdropnaを実行し、その後に引数なしでdrop_duplicatesを実行します。郵便番号は空欄のことが多いため、dropnaによって有効な注文が大量に削除されます。また、' リーズ'と'リーズ 'の違いが残るため、重複の一部は削除されません。売上は実際より大幅に低くなり、どの行が削除されたのかもわかりません。

改善後の処理では、読み込み時に'N/A'と'-'を欠損値として指定し、siteの前後の空白を除去して各単語の先頭を大文字にします。amountは'£'とカンマを取り除いてからto_numericで変換し、order_dateはdayfirstとcoerceを指定して変換します。order_idを基準に重複を削除して最初の行を残し、amountが欠損している行だけを削除します。その後、各工程で削除した行数を表示し、売上合計を決済事業者のレポートと照合します。トマシュは、すべての差異を説明できるようになりました。

データクレンジングが適切にできたかは、どう確認しますか?

データのクリーニングは、各手順の前後で行数を数え、主要な合計値を独立した情報源と照合し、欠損値に変換された行を調べて確認してください。infoを再実行して列の型を確認し、拠点などのカテゴリについて一意の値を一覧にします。想定以上の行が削除された手順があれば、先に進む前にその行を確認してください。

pandasでのデータクレンジングに、AIアシスタントはどのように役立ちますか?

各列の内容、問題点、適用したいルールを説明すれば、AIアシスタントはデータのクリーニング手順の案を作成でき、なじみのない関数も説明できます。氏名、住所、郵便番号全体などの実際の顧客データを貼り付けるのではなく、架空のサンプル値を使って構造を説明してください。各手順の後で行数を報告するよう指示し、使用するすべての関数の引数をpandasの公式ドキュメントで確認してください。アシスタントは、存在しないオプションや、バージョンによって変更されたオプションを提案することがあるためです。

pandasでデータをクリーニングする際によくある間違いは何ですか?

最も多い間違いは、引数を指定せずにdropnaを呼び出し、任意項目の列以外には問題のない行まで削除してしまうことです。ほかにも、表記を統一する前に重複を削除する、日と月の順序を確認せずに日付を変換する、元のファイルを上書きする、整形後の合計を信頼できる数値と照合しない、といった間違いがあります。

このレッスンはTosheo.aiの中でどのように位置づけられていますか?

これは、データサイエンス講座のデータサイエンス・分析カテゴリーに属するコード実習レッスンです。Tosheo.aiの各科目は、概念の学習とコードを書かない演習から始まります。コード実習レッスンは、さらに深く学ぶための任意のコースです。登録後に利用できるこのレッスンの実習完全版では、Pythonとpandasでデータ整備の各手順を記述・実行し、採点基準に沿って評価を受けます。Pythonが初めての方は、Python講座から始めてください。実務スキルを身につけるためのものであり、集中講座でも、就職を保証するものでもありません。

出典と対象範囲

pandasドキュメント:read_csv(確認日:19 October 2026) ↗

pandasユーザーガイド:欠損データの扱い(確認日:19 October 2026) ↗

pandasドキュメント:DataFrame.dropna(確認日:19 October 2026) ↗

pandasドキュメント:DataFrame.drop_duplicates(確認日:19 October 2026) ↗

pandasドキュメント:DataFrame.astype(確認日:19 October 2026) ↗

pandasドキュメント:to_numeric(確認日:19 October 2026) ↗

pandasドキュメント:to_datetime(確認日:19 October 2026) ↗

pandasドキュメント:Series.str.strip(確認日:19 October 2026) ↗