这段代码运行完美:
% arara: pdflatex: { shell : yes }
% arara: pythontex
% arara: pdflatex: { shell : yes }
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{provapd.txt}
user_id|age
1|20
2|25
3|30
4|35
\end{filecontents*}
\usepackage{pythontex}
\begin{document}
prova pandas
\begin{pycode}
import pandas as pd
users = pd.read_table(r'provapd.txt',
sep='|', index_col='user_id')
print(users.age.mean())
#print(users.head(3))
\end{pycode}
\end{document}
但如果我取消注释,print(users.head(3))
我会收到此错误:
! Emergency stop.
<inserted text>
$
l.3 user_
id
End of file on the terminal!
纯 Python 中的结果是:
27.5
age
user_id
1 20
2 25
3 30
我如何管理带有下划线的变量名pythontex
?
答案1
我懂了:
% arara: pdflatex: { shell : yes }
% arara: pythontex
% arara: pdflatex: { shell : yes }
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{provapd.txt}
user_id|age
1|20
2|25
3|30
4|35
\end{filecontents*}
\usepackage{pythontex}
\begin{document}
prova pandas
\begin{pycode}
import pandas as pd
users = pd.read_table(r'provapd.txt',
sep='|', index_col='user_id')
print(users.age.mean())
print('\n\n')
s=str(users.head(3))
s = s.replace('_','\_').replace('\n','\n\n')
print(s)
\end{pycode}
\end{document}
遗憾的是,我不知道如何将输出放在这里。我在其中添加了双换行符以分隔平均值和数据框内容,将输出转换为其字符串表示形式并将其作为简单字符串使用,替换所有必要的内容。遗憾的是,这导致 ID 和年龄用换行符分隔(这很奇怪)。
无论如何,这种方法可以随时使用,您可以通过将字符串替换为 LaTeX 表格环境的形式,将 pandas 数据框的输出转换为 LaTeX 表...
编辑:现在它工作得很好:
% arara: pdflatex: { shell : yes }
% arara: pythontex
% arara: pdflatex: { shell : yes }
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{provapd.txt}
user_id|age
1|20
2|25
3|30
4|35
\end{filecontents*}
\usepackage{pythontex}
\begin{document}
prova pandas
\begin{pycode}
import pandas as pd
users = pd.read_table(r'provapd.txt',
sep='|', index_col='user_id')
print(users.age.mean())
print('\n\n')
s=str(users.head(3))
s = s.replace('_','\_').replace('\n',' ',1).replace('\n','\n\n')
print(s)
\end{pycode}
\end{document}
注意第一个替换 - string.replace 函数采用可选的 thirst 参数,即“count” - 应执行多少次替换。在这种情况下,您只需要一次(第一次)。
答案2
打印命令将被打印,并且与 LaTeX 中一样,下划线将会出现错误。
您可以通过将 autoprint 变量设置为 false 来抑制直接打印,然后使用\stdoutpythontex
或\printpythontex
在代码块后打印。
在当前的 latex 中,不再需要 filecontents 包。
\documentclass{article}
\begin{filecontents*}[overwrite]{provapd.txt}
user_id|age
1|20
2|25
3|30
4|35
\end{filecontents*}
\usepackage{pythontex}
\begin{document}
prova pandas
\setpythontexautoprint{false}
\begin{pycode}
import pandas as pd
users = pd.read_table(r'provapd.txt',
sep='|', index_col='user_id')
print(users.age.mean())
print(users.head(3))
\end{pycode}
STDOUT
\stdoutpythontex[verbatim]
PRINT
\printpythontex[verbatim]
\end{document}