簡體   English   中英

如何從組織模式的源塊返回多個乳膠或組織表?

[英]How to return multiple latex or org tables from an org-mode's source block?

我的具體問題是,很多時候我在組織模式下使用python源代碼塊對數據幀的許多變量運行相同的統計分析,然后將它們顯示為乳膠表。 手動執行每個分析非常繁瑣,所以我想使用一個for循環:

#+begin_src python :exports results :session :results latex   
import pandas as pd   
df = pd.DataFrame({'a': [1, 2, 3, 4, 5],
                        'b': [9, 8, 7, 6, 5]})

for var in df.columns:
    df[var].value_counts().to_latex()
#+end_src

問題在於它僅返回源塊返回的最后一個值(for循環的最后一次運行。

#+Results:
#+BEGIN_LaTeX
\begin{tabular}{lr}
\toprule
{} &  b \\
\midrule
7 &  1 \\
6 &  1 \\
5 &  1 \\
9 &  1 \\
8 &  1 \\
\bottomrule
\end{tabular}
#+END_LaTeX

那么有沒有一種方法可以從源代碼塊中實際獲取多個乳膠表或組織表?

編輯:考慮@dschwilk答案,我需要返回多個#+ Results塊(每個乳膠或org表一個),以便我可以在它們之間添加文本描述。 如:

Description for table 1
#+RESULTS:
#+BEGIN_LaTeX
\begin{tabular}{lr}
\toprule
{} &  a \\
\midrule
5 &  1 \\
4 &  1 \\
3 &  1 \\
2 &  1 \\
1 &  1 \\
\bottomrule
\end{tabular}
#+END_LaTeX

Description for table 2    
#+RESULTS:
\begin{tabular}{lr}
\toprule
{} &  b \\
\midrule
7 &  1 \\
6 &  1 \\
5 &  1 \\
9 &  1 \\
8 &  1 \\
\bottomrule
\end{tabular}
#+END_LaTeX

創建想要在python中工作的文本輸出嗎? 例如,收集生成的LaTeX,並添加\\table{}\\caption

#+begin_src python :exports results :session :results latex   
import pandas as pd   
df = pd.DataFrame({'a': [1, 2, 3, 4, 5],
                        'b': [9, 8, 7, 6, 5]})

var_dict = {}
for var in df.columns:
    var_dict[var] = df[var].value_counts().to_latex()

res = '\n'.join(['\\begin{table}\n\\caption{Variable: %s} \n\n %s\n\end{table}' % (key, value) for (key, value) in var_dict.items()])
res
#+end_src

#+results:
#+BEGIN_EXPORT latex
\begin{table}
\caption{Variable: a} 

 \begin{tabular}{lr}
\toprule
{} &  a \\
\midrule
5 &  1 \\
4 &  1 \\
3 &  1 \\
2 &  1 \\
1 &  1 \\
\bottomrule
\end{tabular}

\end{table}
\begin{table}
\caption{Variable: b} 

 \begin{tabular}{lr}
\toprule
{} &  b \\
\midrule
7 &  1 \\
6 &  1 \\
5 &  1 \\
9 &  1 \\
8 &  1 \\
\bottomrule
\end{tabular}

\end{table}
#+END_EXPORT

您可以創建一個列表,並將乳膠輸出附加到每個循環中:

latex_list=[]
for var in df.columns:
    latex_list.append(df[var].value_counts().to_latex())

也許像這樣打印:

for e in latex_list:
    print(e)

我設法得到了一些接近我想要的東西,但是我必須運行多個src_blocks(我確實想避免)。

我有一個創建所有表並將其存儲在列表中的源代碼塊,並為每個表創建一個新的src_block並將其返回。

例如:

#+begin_src python :exports results :session :results silent)
  import pandas as pd
  results_tables = []
  d = pd.DataFrame({'a': [1, 2, 3, 4, 5],
                    'b': [9, 8, 7, 6, 5]})

  for var in d.columns:
      results_tables.append(d[var].value_counts().to_latex())
#+end_src

#+RESULTS:
#+begin_src python :exports results :session :results latex
results_tables[0]
#+end_src

#+RESULTS:
#+BEGIN_LaTeX
\begin{tabular}{lr}
\toprule
{} &  a \\
\midrule
5 &  1 \\
4 &  1 \\
3 &  1 \\
2 &  1 \\
1 &  1 \\
\bottomrule
\end{tabular}
#+END_LaTeX

#+begin_src python :exports results :session :results latex
results_tables[1]
#+end_src

#+RESULTS:
#+BEGIN_LaTeX
\begin{tabular}{lr}
\toprule
{} &  b \\
\midrule
7 &  1 \\
6 &  1 \\
5 &  1 \\
9 &  1 \\
8 &  1 \\
\bottomrule
\end{tabular}
#+END_LaTeX

暫無
暫無

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

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