2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Jinja2 テンプレートエンジンにおける nan/None の空白化や数値カンマ区切りといった編集方法

Last updated at Posted at 2018-05-29

はじめに

前回の続きで Flask の話です。

データ分析のみならず、データセットの加工に便利なため、バックで 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 のマクロを使うといいかもしれないですね。

以上です。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?