データ読込時に消えたゼロを復活!Pandasでデータを修正する方法

データを取り込む際に「ゼロが消えてしまった!」というトラブル、誰もが一度は経験するもの。
先日の記事では、ゼロを消さないための対策を紹介しました。

つまり、前処理です。

┌──────┐   ┌──────┐  

  前回          今回

──────   ─»  ───────  

  前処理         後処理

└──────┘   └──────┘

では、「すでに消えてしまったゼロ」はどうすればいいのでしょうか?

Pandas を使えば、消えたゼロを取り戻す方法もあります。つまり、後対処です。
この記事では、「うっかりゼロが消えてしまった後の対処法」を紹介します!

ただし、あくまで、推奨方法は以下の記事です:

データ読み込み時に指定する方法です。

理由は後述します。


ゼロが消えた後に取り戻す方法

📀データ

次のように CSV📄 に記載されているとします。

ID郵便番号商品コード
001230456789000456
000450123456000789
012340012345001234

🔽これを普通に読み込むと:

import pandas as pd

# CSVの読み込み
df = pd.read_csv('https://biz-data-analytics.com/pandas-multiple-columns-keep-leading-zeros-11110.csv')

📋実行結果:

ID郵便番号商品コード
1230456789456
450123456789
123400123451234

あらら、先頭のゼロが消えてしまいましたね…。😢

解決方法

str.zfill() を使ってゼロを補う:

# 先頭ゼロを復元
df['ID'] = df['ID'].astype(str).str.zfill(5)
df['郵便番号'] = df['郵便番号'].astype(str).str.zfill(7)
df['商品コード'] = df['商品コード'].astype(str).str.zfill(6)

📋実行結果:

ID郵便番号商品コード
001230456789000456
000450123456000789
012340012345001234

これでバッチリです! 🎉

コードの解説

df['ID'] = df['ID'].astype(str).str.zfill(5)

1 ─────         2 ──────── 3 ── 4 ────

┌──────────────────────────────┐

  1. データフレーム(df)のID列にアクセスして、更新されたデータを上書き
  2. astype(str) → 数値を文字列型に変換
  3. str → 文字列専用メソッドにアクセスするための準備
  4. zfill(5)5桁に満たない場合、先頭にゼロを追加

└──────────────────────────────┘

📋実行結果:

ID郵便番号商品コード
001230456789000456
000450123456000789
012340012345001234

⚠️よくある間違いとその解決策

⚠️⚠️「後で直せばいいや」と考えるのは危険!

データを読み込むときにゼロを消してしまうと、後から補填するには元の桁数を知らなければなりません。

さらに、意図しないゼロが追加されることで、本来のデータの意味が変わってしまいます。

最初から文字列型で読み込むほうが断然ラクです。

これは、データの改ざんに近いリスクを生む可能性があります

まとめ

ゼロが消えてしまっても、Pandas の機能を活用すれば復活させることができます。

ただし、そもそもゼロを消さないようにするのがベストな対策 です。(詳しくは前回の記事を参照)

str.zfill() を活用してゼロを補填する

といった方法を知っておけば、万が一ゼロを消してしまった場合でも対応できます。

データの型を意識して、ゼロを大切に扱っていきましょう! 😊