まったく。
日本語(utf-8)が使えないのは,Pweave.engine で経験・解決済みだろ。
ということで,xtable 関数に原因があるわけではないので,それを呼び出す前に locale をセットする必要があるということ。
* 使用法:
setlocale は,xtable の定義の後に実行されているので,普通は再度設定する必要はない。
xtable の引数は,
xtable(x, caption, label, fmt, align, pos="htbp")
x pandas のデータフレームオブジェクト caption 表のキャプション
label table 環境につけるラベル。
label+".tex" という名前でファイルが作られるので,必要なところで \input{*} で読み込む。
fmt 表の各列の形式を指定するリスト
文字列なら "s",数値なら小数部の桁数 "3" など,整数なら "0" または "d" を指定 する。
表の列あたり 1 文字ずつ,全部で表の列数ぶんの長さの文字列で指定(例 "s053"
align 各列での配置法を表す 1 つの文字列(長さは表の列数に等しい) 例 "rllcr"
pos 表の位置。デフォルトは "htbp"
* 使用例
<<>>=
import pandas as pd x = pd.DataFrame({
"a" : [1,2,3,4,5],
"b" : [1.1,2.2,3.3,4.5,5.5], "c" : ["a", "b", "c", "d", "e"] })
xtable(x, "xtable 使用例", "label", "d1s", "rrr")
@
\input{labe.tex}
* xtable
<<>>=
def xtable(x, caption, label, fmt, align, pos="htbp"):
import scipy as sp
colnames = x.columns
f = open(label+".tex", "w")
x = sp.array(x)
n = x.shape
print("\\begin{{table}}[{0:s}]". format(pos), file=f)
print("\\begin{center}", file=f)
print("\\caption{{{0:s}}}". format(caption), file=f)
print("\\label{{{0:s}}}". format(label), file=f)
print("\\begin{{tabular}}{{{0:s}}} \\hline". format(align), file=f)
for i in range(n[0]):
if i == 0:
for j in range(n[1]):
print("{0:s}". format(colnames[j]), end="", file=f)
if j == n[1]-1:
print(" \\\\ \\hline", file=f)
else:
print(" & ", end="", file=f)
for j in range(n[1]):
if fmt[j] == "s":
print("{0:s}". format(x[i,j]), end="", file=f)
elif fmt[j] == "d":
print("{0:d}". format(int(x[i,j])), end="", file=f)
else:
digits = int(fmt[j])
print("{1:.{0:d}f}". format(digits, float(x[i,j])), end="", file=f)
if j == n[1]-1:
print(" \\\\", end="", file=f)
else:
print(" & ", end="", file=f)
if i == n[0]-1:
print(" \\hline", file=f)
else:
print(file=f)
print("\\end{tabular}", file=f)
print("\\end{center}", file=f)
print("\\end{table}", file=f)
f.close()
import locale
locale.setlocale(locale.LC_ALL, "ja_JP.UTF-8")
@