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

データ分析をしていると、郵便番号や商品コードのような「ゼロ始まり」のデータに出会うこと、ありますよね?
でも気づいたら… 「先頭ゼロが消えてる!」 なんてこと、ありませんか? 😱

ちなみに、先頭のゼロ消失をゼロバッティングと呼びます
目次
どうして先頭のゼロが消えるの? 🤔
Pandasはデータを読み込むとき、列の中身を見て「これは数字だな」と自動で判断 します。
その結果、00123
のようなゼロ始まりのデータが 数値型(int型)として認識 され、先頭のゼロが消えてしまうんです。
データ データ
─── 数字だな! ───
00123 数字にはゼロ不要 123
00045 任せて!! 45
01234 <── 🤖 ──> 1234
先頭のゼロを守るための簡単な解決策 ✅
Pandas
では、特定の列を文字列(str
型)として読み込む ことで、先頭のゼロを守れます。
- 読み込み時に型を指定する
- データ全体を文字列として読み込む
読み込み時に型を指定する
特定の列に対して
たとえば、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 | 郵便番号 |
---|---|
123 | 0012300 |
45 | 0004500 |
1234 | 0123400 |
これなら、すべての列が文字列型として扱われるので、先頭ゼロも安心です。

✨ ただし、数値データが文字列として扱われることで、大小比較やソートが文字列ルールで行われてしまい、データ分析で致命的な誤りを引き起こす可能性があります。
ちなみに、dtype
とは? 💡
pd.read_csv('CSVファイル名', dtype={'列名': データの型})
▲
│
data type
(データ型)の略 で、Pandas
がデータをどの型として扱うかを指定するための引数
┌┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┐dtype={"zip_code": str}
の右辺は 辞書(dictionary
) の記述、
キーに列名(郵便番号
)、値にデータ型(str
)を指定
└┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┘

辞書と同じ考え方で、複数指定する場合はカンマで区切ります
最後に:先頭のゼロを守るのはあなた次第! 🔥
データ分析の現場では、ちょっとしたミスが大きなトラブルにつながることもあります。
特に、dtype={"zip_code": str}
のように 文字列型を明示する設定 をデフォルトにしておけば、
予期せぬ、先頭のゼロ消失を未然に防げるのでおすすめです。
これからは、先頭のゼロを消さずに大切に扱ってあげてくださいね! 🛡️✨