Python 如何从组织模式返回多个latex或组织表';s源块?
我的具体问题是,很多时候我在org模式下使用python源代码块对数据帧的许多变量运行相同的统计分析,然后将它们表示为latex表。手动执行每个分析变得非常乏味,因此我想使用for循环:Python 如何从组织模式返回多个latex或组织表';s源块?,python,org-mode,org-table,Python,Org Mode,Org Table,我的具体问题是,很多时候我在org模式下使用python源代码块对数据帧的许多变量运行相同的统计分析,然后将它们表示为latex表。手动执行每个分析变得非常乏味,因此我想使用for循环: #+begin_src python :exports results :session :results latex import pandas as pd df = pd.DataFrame({'a': [1, 2, 3, 4, 5], 'b':
#+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
那么,有没有一种方法可以从一个源块中实际获取多个latex或org表呢
编辑:
考虑@dschwilk answer,我需要返回多个#+结果块(每个latex或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中创建所需的文本输出是否可行?例如,收集生成的文本并添加
\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输出附加到该列表中:
latex_list=[]
for var in df.columns:
latex_list.append(df[var].value_counts().to_latex())
也许可以这样打印:
for e in latex_list:
print(e)
我设法得到了一些接近我想要的东西,但我必须运行多个src_块(这是我真正想要避免的) 我有一个源块,它创建所有表并将它们存储在一个列表中,为每个表创建一个新的src_块并返回它 例如:
#+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
@dschwik嗯,不完全是这样。我目前做了一些类似的事情,但将每个latex表连接为一个字符串,并执行与您的解决方案相同的操作,但这不允许我评论(实际上描述)出于数据分析的目的,我编辑了原始问题以进行澄清。感谢您的输入!我尝试过这样做,但在结果块中,我得到了一行很长的latex表语法,它并排显示每个表,尽管我可以轻松地修复类似的问题,但它不允许我在表之间包含注释。可以吗在每次latex输出之前循环列表打印注释?我不确定print语句是否会以您想要的格式输出它,我给出了一个循环示例。谢谢@BobbyDurrett,但大多数情况下,注释可以是广泛的,因为我使用组织模式编写数据科学报告,使用print语句对我来说不可行.