Excelだけではない「CSVとパーサー問題」の正体

データ連携をしていると、

001 → 1

になったり、

2025-01-01

が勝手に日付になったり、

TRUE

が真偽値扱いされたりします。

この問題、よく 「Excelが悪い」 と言われます。

ですが、実は本質はそこではありません。

根本原因は、 CSVが型情報を持たない ことにあります。そして、パーサー(読み込み側)が推測するしかないことが問題の本質です。

この記事では、

  • なぜこの問題が起きるのか
  • CSVの限界
  • パーサーとは何か
  • Excelだけの問題ではない理由
  • 実務ではどう対策するのか

を初心者にも、わかりやすく解説します。


まずCSVとは?

CSVは、「Comma Separated Values」の略です。

00123,Tokyo,TRUE

のように、 カンマ区切りのテキスト です。

つまり、CSVは 「ただの文字列」 です。

ここが本当に重要です。

👉 CSVには型情報がない。

例えば:

00123

があったとしても、

CSV自体は:

  • 数値なのか
  • 文字列なのか
  • 商品コードなのか
  • 郵便番号なのか

を知りません。

つまりCSVはこう言っている。「00123って文字があります」だけです。

意味は持っていません。

では、どうやって単なる文字列に意味を持たせているのでしょうか?

そこで登場するのが「パーサー」です。


パーサーとは?

パーサーとは、「文字列を解釈する仕組み」のことを言います。

例えば:

ソフト パーサー
Excel Excelの読み込み処理
Python pandas CSVリーダー
JavaScript JSON/CSVパーサー
BIツール インポート機能

など。

つまり、CSV は、文字列そのものに意味は定義されていないが、これらのパーサーが解釈することで、文字列に意味を持たせる仕組みとなっています。


パーサーは「推測」する

CSV に型情報がないので、

パーサーは:

「これは数値っぽいな」

と推測します。

例えば

CSV

00123

Excelの解釈

「数値だな」

123

になります。

でも本来は?

例えば:

本当の意味

  • 郵便番号
  • 社員コード
  • 商品コード

なら、

文字列として扱うべきかもしれません。

ここが重要です。

このような事態は、なにもExcelだけに限定した話ではなく、Pythonでも起きます。

例えば Python の pandas。

read_csv() を使うと、 自動型推測 が走ります。

例えば

00123

123

になることがあります。

BIツールでも起きる

例えば:

  • Power BI
  • Tableau
  • Looker

なども、型推測を行います。

なぜこうなる?

理由は単純です。CSVには、 型情報が存在しない からです。


NULL問題も同じ

例えば:

A001,

これも、カンマの次が

  • NULL
  • 空文字
  • 空白

のどれなのかCSV単体では分かりません。

そこに、ゆらぎが発生します。同じ CSV を解釈しても、解釈するパーサーの解釈の違いにより、データの意味合いが変わってしまう可能性があるのです。

つまり本質は「型情報なしデータをどう解釈するか」の問題です。

残念ながら、この解釈方法に明確な規定は、存在しません。あるのは、慣習のようなものだけです。


実務でよく起きる事故

  1. 001問題

00123 → 123

  1. 日付化

1-1 → 1月1日

  1. 指数表記

100000000000 → 1E+11

  1. TRUE/FALSE問題

TRUE が真偽値化。

  1. NULL問題

空欄解釈がシステムごとに違う。

では、実務ではどう対策すれば良いのでしょうか?

かなり重要です。

方法① 型を決める

例えば:

項目
郵便番号 文字列
顧客コード 文字列
金額 数値

を先に決めます。

方法② CSVをそのまま信用しない

これは重要です。

CSVは、「ただの文字列」と考える。

方法③ インポート時に型指定

例えば:

データ → テキスト/CSVから

で、

  • 数値
  • 文字列
  • 日付

を明示。

ただし、パーサーが読み込む際のデータの意味付けに対応している必要があります。

方法④ 正規化する

例えば:

=A1&""

で強制的に文字列化する。

方法⑤ データ仕様書を作る

かなり実務的です。

例えば:

列名 NULL許可
customer_code string NO
amount number YES

を決める。

これは「データ連携」の枠を超えて、「データ設計」の話になってきます。

いづれの方法も、絶対ではありませんが、データ連携を行う前に、これらの方法をとることで、連携時のデータ齟齬は減ります。


データ化けの本質

ほとんどの人は、このような問題に直面すると「Excelが変」だと思います。

でも本質は、

「データに型情報がない」

ことです。

そして、それを扱うシステムは、限られた情報の中で、推測するしかないのです。

だから:

  • Excel
  • Python
  • BIツール
  • DB

どれを CSV の処理に利用しようと、同じ問題が起きます。

大切なのは、それが起こることを当然として、その原因を理解した上で、対応することです。

対策例:

  • 自動推測させずに、文字列として処理
  • 不安定な(空欄)を用いず、""固定
  • 半角、全角のスペースは除去
  • 日付の型は固定(YYYY/MM/DD)

などのデータスクリーニングを実施する。


まとめ

「001が1になる問題」は、Excel固有の問題ではありません。

本質は:

  • CSVが型情報を持たない
  • パーサーが推測するしかない

ことにあります。

つまり、

「型情報なしデータをどう解釈するか」という、データ連携全体に共通する問題です。

実務では、

  • 型設計
  • 型指定
  • 正規化
  • データ仕様書

が非常に重要になります。

そしてデータクリーニングとは、「見た目の文字列」ではなく、 「そのデータをどう解釈するか」 を整理する作業でもあるのです。