数値の出力を1e-x の形にしてpandasからlatexの表の表現を得る
scientific notationっていいます。
0.000345 という数値を、3.45e-4 と表記する記法です。日本語だと科学的記数法とか指数表記とか。
Pythonのpandasで分析を行って、その結果のデータフレームをlatex 形式で出力したいときに、表のなかの値がすごい小さい値になると0が多くて煩わしいんですが、そこをパッと解決するpandasのoptionがすぐに見つからなかったので、手を動かしました。
細かい話ですが備忘録として残します。pandasのset_optionとかでなにかあったら教えてください
def scientificRepl(fnum): valid=3 assert fnum < 1. cnt = 0 for idx, c in enumerate(str(fnum)): if c == "0": cnt += 1 elif c == ".": continue else: break snum = str(fnum)[idx:][:valid] snum = snum + "0" * (valid - len(snum)) out = snum[0] + "." + snum[1:] + "e-" + str(cnt) return out
はい。これだけですね。
float を受け取ってstr形式にして愚直に変形してきます。
これをpandas.to_latexのfloat_formatterに渡します。
cols = ["values"] df.to_latex(columns=cols, float_format=scientificRepl)