簡體   English   中英

Pandas DataFrame 至 Latex 格式化函數

[英]Pandas DataFrame to Latex Formatter Functions

我正在嘗試使用格式化程序 function 將 DataFrame 導出到 Latex 以指定列的格式。 到目前為止,我使用 function 來指定每一列的格式。 我有以下代碼片段,效果很好。

def use_f_2(x):
    return "%.2f" % x

df.to_latex(formatters=[None, use_f_2, use_f_2])

這會將第 2 列和第 3 列中的值四舍五入到小數點后第二位。 現在我想擴展這個 function 以額外保持小數位數靈活(在上述情況下固定為 2)。 我會想象它是這樣的

def use_f_2(x, num_decimals):
    return f"%.{num_decimals}f" % x

但是這個function不能用在

df.to_latex(formatters=[None, use_f_2, use_f_2])

因為現在有兩個 arguments。

有誰知道如何實現這個?

提前謝謝了!

可以使用functoolspartial

import pandas as pd
import numpy as np
from functools import partial

def use_f_2(x, num_decimals):
    return f"%.{num_decimals}f" % x

# the number of columns can be passed to this function
use_f = lambda x: partial(use_f_2, num_decimals=x)

df = pd.DataFrame(np.random.rand(10, 3))
df.to_latex(formatters=[None, use_f(2), use_f(3)])

我重新整理並擴展了 SultanOrazbayev 的想法,並添加了指定格式類型的機會:

from functools import partial

# This function returns a function which formats numbers according to the specified string operations.
# Inputs
# - precision: integer -> accuracy to be shown (e.g. number of decimal places if format type is "f" or number of significant digits if format type is "g")
# - num_format: string -> format type

def format_num(precision, num_format):
    def create_formatter(num, inner_prec, inner_form):
        return "{:.{}{}}".format(num, inner_prec, inner_form)
    return partial(create_formatter, inner_prec=precision, inner_form=num_format)

使用每列的首選數字類型和小數位數應用 function

df.to_latex(formatters=[None, format_num(4, "g"), format_num(2, "f")])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM