1e-xx みたいな形でpandasから表を出力する関数をさくっと書いた

数値の出力を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)