28

各列のデータが値に応じたスタイルでフォーマットされるように、テーブルをフォーマットしようとしています(スプレッドシートプログラムの条件付きフォーマットと同様)。HTMLフォーマッターを使用してパンダでそれを達成するにはどうすればよいですか?

典型的なユースケースは、テーブル内の重要な値を強調表示することです。例えば:

    correlation  p-value
0   0.5          0.1
1   0.1          0.8
2   0.9          *0.01*

pandasを使用すると、HTML出力のカスタムフォーマッターを定義できます。上記の出力を取得するには、次のように使用できます。

import pandas as pd
from pandas.core import format
from StringIO import StringIO
buf = StringIO()
df = pd.DataFrame({'correlation':[0.5, 0.1,0.9], 'p_value':[0.1,0.8,0.01]})
fmt = format.DataFrameFormatter(df, 
          formatters={'p_value':lambda x: "*%f*" % x if x<0.05 else str(x)})
format.HTMLFormatter(fmt).write_result(buf)

ただし、重要な値のスタイルを変更したいと思います(たとえば、太字のフォントを使用します)。

考えられる解決策は、CSSクラスをHTML出力のタグにアタッチすること<td>です。これは、CSSスタイルシートを使用してフォーマットできます。上記は次のようになります。

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>correlation</th>
      <th>p_value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>0</td>
      <td> 0.5</td>
      <td> 0.10</td>
    </tr>
    <tr>
      <td>1</td>
      <td> 0.1</td>
      <td> 0.80</td>
    </tr>
    <tr>
      <td>2</td>
      <td> 0.9</td>
      <td class='significant'> 0.01</td>
    </tr>
  </tbody>
</table>

編集<span class="signifcant">...</span>:@ Andy-Haydenが提案したように、私の例では星を置き換えるだけでフォーマットを追加できます。

import pandas as pd
from StringIO import StringIO
buf = StringIO()
significant = lambda x: '<span class="significant">%f</span>' % x if x<0.05 else str(x)
df = pd.DataFrame({'correlation':[0.5, 0.1,0.9], 'p_value':[0.1,0.8,0.01]})
df.to_html(buf, formatters={'p_value': significant})

パンダの新しいバージョンはタグをエスケープします。これを回避するには、最後の行を次のように置き換えます。

df.to_html(buf, formatters={'p_value': significant}, escape=False)
4

2 に答える 2

27

引数が付属するDataFrameto_htmlメソッドを使用できformattersます。

より簡単な解決策は、(ではなく)<span class="significant">とで囲むことです。注: デフォルトでは、これはエスケープされる (つまり、になる) ため、引数を使用する必要があります。</span>*<&lt;escape=False

于 2013-01-31T16:16:27.443 に答える