<jinja, pandas> pandasでjinjaをちょっと。

pandasjinjaをちょっとやってみた。

pandasのシリーズSeriesの要素を順に並べる。

まず、importして、jinjaのテンプレートtemplateを作る。

In [109]: import pandas as pd

In [110]: from jinja2 import Template

In [111]: df = pd.DataFrame({'a':[1,2,3,4,5], 'b':[6,7,8,9,10], 'c':[11,12,13,14,15]})

In [112]: s = '''
     ...: <body>
     ...: <ul>
     ...: {% for item in items %}
     ...:   <li>{{ item[0] }}</li>
     ...:   <li>{{ item[1] }}</li>
     ...: {% endfor %}
     ...: </ul>
     ...: </body>
     ...: '''

で、テンプレートのオブジェクト作成。

In [113]: t = Template(s)

で、レンダーrender

In [114]: print(t.render(items=df.items()))

<body>
<ul>

  <li>a</li>
  <li>0    1
1    2
2    3
3    4
4    5
Name: a, dtype: int64</li>

  <li>b</li>
  <li>0     6
1     7
2     8
3     9
4    10
Name: b, dtype: int64</li>

  <li>c</li>
  <li>0    11
1    12
2    13
3    14
4    15
Name: c, dtype: int64</li>

</ul>
</body>

df.items()なので、Seriesがイタレートされて渡された。
じゃ、ってことで、Seriesで、.iteritem()をする。

In [115]: print(t.render(items=df.b.iteritems()))

<body>
<ul>

  <li>0</li>
  <li>6</li>

  <li>1</li>
  <li>7</li>

  <li>2</li>
  <li>8</li>

  <li>3</li>
  <li>9</li>

  <li>4</li>
  <li>10</li>

</ul>
</body>

なるー。 わかった気がする。

マニュアル

Welcome | Jinja2 (The Python Template Engine)

参考サイト

Jinja2 利用ノート — 読書ノート v1.4.0dev