はじめに
データ分析のみならず、データセットの加工に便利なため、バックで pandas を採用しているケースを想定しています。
Flask はテンプレートエンジンとして Jinja2 を採用しています。このとき pandas のデータフレームのほうで欠損値を持っていることって結構あるんじゃないかと思います。
データフレームの欠損値をそのまま Jinja2 でウェブページに出してしまうと恐ろしいことに None だとか nan と表示されてしまいます。事前に data.fillna(0) などで欠損値を埋めればいいのですが、今回はテンプレートエンジン側での回避方法を説明します。
テンプレートで欠損値を表示しない
数値型・欠損値 の場合
{{ if var == var else '' }}
数値型のデータに欠損値がある場合、そのまま表示させると nan (Not A Number) が表示されます。そこで nan 同士を比較すると False となる性質を利用し、変数同士を比較して空白に置き換えれば OK です。
文字列型・欠損値 の場合
{{ if var != None else '' }}
文字列が None でないかどうか比較し None であれば空白を表示します。
空白以外に置き換える
たとえば欠損値であれば *** にしたい場合。
{{ if var != None else '***' }}
置き換えたい文字列を指定します。
その他のテクニック
これと組み合せて数値型をカンマ区切りするといった編集もできます。
小数点有り数値型をカンマ区切りにする
{{ '{:,}'.format(var) }}
小数点無し(整数)の数値型をカンマ区切りにする
{{ '{:,.0f}'.format(var) }}
組み合わせ
これを組み合わせるとこうなります。
例:小数点無し(整数)の数値型が欠損値 (nan) で無い場合はカンマ区切りにする。欠損値の場合は *** を表示する。
{{ '{:,.0f}'.format(var) if var == var else '***' }}
Jinja2 のマクロを使うといいかもしれないですね。
以上です。