Python応用:pandasでバージョン表記を正規化する方法(実務で役立つデータ整理)

pandas python 1

IoTやハードウェア系のプロジェクトでは、機器ごとのバージョン管理が重要になります。
とくにSW(ソフトウェア)やFW(ファームウェア)のバージョンは、運用や保守に直結するため、正確に扱う必要があります。

ただし、実際の現場ではこのバージョン管理がかなり厄介です。

この記事では、pandasを使って「バージョン表記を揃える(正規化する)」方法について、具体的なコード付きで解説していきます。

Pythonの導入についてはこちら。

Python入門:最初のプログラムを作って実行する方法 – Lean Data Office

Python環境構築のやり方|初心者向け完全ガイド – Lean Data Office

なぜバージョンの正規化が必要なのか?

現実のデータでは、バージョン表記は統一されていません。

たとえば、同じ意味のバージョンでも次のようにバラバラな形式で保存されていることがあります。

  • V1.0.0
  • Ver1.0.0
  • Version 1.0.0.1
  • 1.0.0 Rev.A
  • 1.0.0.2

このような状態のままだと、次のような問題が起きます。

「V1.0.0」と「1.0.0」を別物として扱ってしまう
ソートや比較が正しくできない
集計やフィルタリングが難しくなる

つまり、「同じものは同じ形に揃える」処理が必要になります。
これが“正規化”です。

サンプルデータで正規化してみる

data = {
"device": ["A", "B", "C", "D", "E"],
"version": [
"V1.0.0",
"Ver1.0.0",
"Version 1.0.0.1",
"1.0.0 Rev.A",
"1.0.0.2"
]
}
image

このように、形式がバラついている列を対象にして処理していきます。

不要な文字を削除する

最初のステップは「余計な文字を削除する」ことです。

pandasでは、文字列操作に.strを使います。

df["clean_version"] = df["version"].str.lower()
image

まずは小文字化して揺れを減らします。

次に、「v」「ver」「version」などの接頭辞を取り除きます。

df["clean_version"] = df["clean_version"].str.replace(r"^ver(sion)?", "", regex=True)
image

「v」が残っています。

df["clean_version"] = df["clean_version"].str.replace(r"^v", "", regex=True)
image

さらに、「revision」や「rev」も削除します。

df["clean_version"] = df["clean_version"].str.replace(r"rev[a-z]*", "", regex=True)
image

数字部分だけを抽出する

次に、バージョンとして意味のある「数字部分」を取り出します。

df["normalized_version"] = df["clean_version"].str.extract(r"(\d+\.\d+\.\d+(?:\.\d+)?)")

この正規表現は、次のようなものを対象にしています。

  • 1.0.0
  • 1.0.0.1

実際の結果を見てみます。

print(df[["version", "normalized_version"]])
image

これで、かなり実用的な形に揃えることができます。

バージョンを比較しやすくする

さらに応用として、「バージョンを比較可能な形」に変換することもできます。

文字列のままだと「1.0.10」と「1.0.2」の比較がうまくいきません。

そこで、分割して数値化します。

df["version_split"] = df["normalized_version"].str.split(".")
image

そして数値に変換します。

df["version_tuple"] = df["version_split"].apply(
lambda x: tuple(int(i) for i in x) if isinstance(x, list) else None
)
image

lambda関数に関しては、下記の記事で詳しく解説しているので参考にしてください。

Python入門:lambda関数とは?短く書ける関数の基本をやさしく解説 – Lean Data Office

この記事では、xを受け取って、全部intにしてtupleにしていることがわかれば十分です。

これで、Pythonのタプルとして比較できるようになります。

sorted_df = df.sort_values("version_tuple")
print(sorted_df[["normalized_version"]])
image

このような正規化は、次のような場面で役立ちます。

  • デバイスのFWバージョン管理
  • アップデート対象の抽出
  • 古いバージョンの洗い出し
  • 顧客ごとの導入状況の分析

特にIoTのように「デバイスが多く、入力ルールが統一されていない」環境では効果が大きいです。

バージョン表記の正規化は、一見地味ですが非常に重要な処理です。

今回のポイントを整理すると、

  • 現場のデータは必ずしも統一されていない
  • 不要な文字を削除してシンプルにする
  • 数字部分だけを抽出する
  • 必要に応じて比較可能な形式に変換する

この流れを押さえることで、バージョン管理の精度が大きく改善します。

pandasの強みは、こうした「汚れたデータを整える」処理をシンプルに書ける点にあります。
慣れてくると、Excelでは手作業だった前処理を一瞬で自動化できるようになります。

筋トレとオートメーションが趣味。 モバイルアプリ個人開発者。 データ処理・可視化とレポートにハマり備忘録と情報共有のためにブログ開設し運営している。