先頭ゼロを守れ!Pandasで消えないデータ処理をする方法

Pythonで数値の先頭のゼロを削除する方法を説明する画像。左の列には00123や00045などの数値があり、右の列にはゼロが削除された123や45が表示されている。

データ分析をしていると、郵便番号や商品コードのような「ゼロ始まり」のデータに出会うこと、ありますよね?

でも気づいたら… 「先頭ゼロが消えてる!」 なんてこと、ありませんか? 😱

ちなみに、先頭のゼロ消失をゼロバッティングと呼びます

どうして先頭のゼロが消えるの? 🤔

Pandasはデータを読み込むとき、列の中身を見て「これは数字だな」と自動で判断 します。

その結果、00123 のようなゼロ始まりのデータが 数値型(int型)として認識 され、先頭のゼロが消えてしまうんです。

データ             データ
───   数字だな!     ───
00123    数字にはゼロ不要   123
00045    任せて!!       45
01234   <── 🤖 ──>   1234  

先頭のゼロを守るための簡単な解決策 ✅

Pandasでは、特定の列を文字列(str型)として読み込む ことで、先頭のゼロを守れます。

  1. 読み込み時に型を指定する
  2. データ全体を文字列として読み込む

読み込み時に型を指定する

特定の列に対して

たとえば、CSV📄を読み込む場合、郵便番号の列を文字列型で読み込むには、次のように書きます:

    import pandas as pd
    
    # 郵便番号の列を文字列型として読み込む
    df = pd.read_csv('https://biz-data-analytics.com/pandas-keep-leading-zeros-11074.csv', dtype={'郵便番号': str})
    ♯ データの中身を表示
    df

    出力結果:

    以下のデータを表形式に変換しました。

    ID
    00123
    00045
    01234
    データ全体に対して

    全体を文字列として読み込む 🌐

    もし「列が多すぎて全部指定するのが面倒!」という場合は、ファイル全体を文字列型で読み込むことも可能です。

    df = pd.read_csv('https://biz-data-analytics.com/pandas-keep-leading-zeros-11074.csv', dtype=str)
    ♯ データの中身を表示
    df


    出力結果:

    ID郵便番号
    1230012300
    450004500
    12340123400

    これなら、すべての列が文字列型として扱われるので、先頭ゼロも安心です。

    ✨ ただし、数値データが文字列として扱われることで、大小比較やソートが文字列ルールで行われてしまい、データ分析で致命的な誤りを引き起こす可能性があります。

    ちなみに、dtype とは? 💡

    pd.read_csv('CSVファイル名', dtype={'列名': データの型})

                         ▲
                         │                    

    data type(データ型)の略 で、Pandasがデータをどの型として扱うかを指定するための引数

    ┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐
    dtype={"zip_code": str} の右辺は 辞書(dictionary の記述、
    キーに列名(郵便番号)、値にデータ型(str)を指定
    └┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘

    辞書と同じ考え方で、複数指定する場合はカンマで区切ります

    最後に:先頭のゼロを守るのはあなた次第! 🔥

    データ分析の現場では、ちょっとしたミスが大きなトラブルにつながることもあります。

    特に、dtype={"zip_code": str} のように 文字列型を明示する設定 をデフォルトにしておけば、
    予期せぬ、先頭のゼロ消失を未然に防げるのでおすすめです。

    これからは、先頭のゼロを消さずに大切に扱ってあげてくださいね! 🛡️✨