根据变量值将pandas数据框转换为latex表格
我有一个很大的数据表
In [25]: df
Out[25]:
FN FP TN TP data method
0 0 0 980 20 A p=1000 n=1000 SNR=0.5 HF
1 0 0 980 20 A p=1000 n=1000 SNR=0.5 HM
2 16 0 980 4 A p=1000 n=1000 SNR=0.5 HMP80
3 18 0 980 2 A p=1000 n=1000 SNR=0.5 HMP90
4 0 0 980 20 A p=1000 n=1000 SNR=0.5 LP70
5 0 0 980 20 A p=1000 n=1000 SNR=0.5 LP85
6 0 0 980 20 A p=1000 n=1000 SNR=0.5 lCV
7 0 58 922 20 C p=1000 n=200 SNR=0.5 HF
8 0 58 922 20 C p=1000 n=200 SNR=0.5 HM
9 17 13 967 3 C p=1000 n=200 SNR=0.5 HMP80
10 19 7 973 1 C p=1000 n=200 SNR=0.5 HMP90
11 0 58 922 20 C p=1000 n=200 SNR=0.5 LP70
12 0 58 922 20 C p=1000 n=200 SNR=0.5 LP85
13 0 58 922 20 C p=1000 n=200 SNR=0.5 lCV
14 0 0 980 20 B p=1000 n=1000 SNR=0.5 HF
15 0 0 980 20 B p=1000 n=1000 SNR=0.5 HM
我想要生成一个latex格式的表格,要求如下:
1 - 每一行的名称是“method”。
2 - 表格要根据数据的值分成几个块,每个块的标题是数据的值。
3 - 每一行需要有4个块。(这样才能适应页面的大小)
4 - 这些块要按照数据的值进行字母顺序排列。
我试过使用matrix2table这个库,但感觉需要做很多预处理工作。有没有简单的方法可以解决这个问题?我对pandas不太熟悉,也许有一些有用的小技巧。
编辑:这是在latex文档中输出的样子。
An example of output
|TP FP TN FN | TP FP TN FN | .... Other 2 blocks
method| A p=1000 n=1000 data| A p=1000 n=100 |
HF | 20 0 980 0 | 3 2 1 1 |
HM | 20 0 980 0 | 2 5 62 3 |
...
...
----------------------------------------------------------------------------
| B p=1000 n =100 | B=1000 n=200 | ..........
HF | 2 3 4 5 | 32 43 24 24| ..........
HM | 34 532 23 3 | 23 3 23 23| ..........
...
1 个回答
0
你可能需要对输出的LaTeX格式进行一些调整,但这样做是否有帮助呢?你的数据和输出不完全一致,所以我做了一些假设性的修改。
In [362]: df
Out[362]:
FN FP TN TP data method
0 0 0 980 20 A p=1000 n=1000 SNR=0.5 HF
1 0 0 980 20 A p=1000 n=1000 SNR=0.5 HM
2 16 0 980 4 A p=1000 n=1000 SNR=0.5 HMP80
3 0 58 922 20 C p=1000 n=200 SNR=0.5 HF
4 0 58 922 20 C p=1000 n=200 SNR=0.5 HM
5 17 13 967 3 C p=1000 n=200 SNR=0.5 HMP80
6 0 0 980 20 B p=1000 n=1000 SNR=0.5 HF
7 0 0 980 20 B p=1000 n=1000 SNR=0.5 HM
8 0 0 980 20 A p=1000 n=100 SNR=0.5 HF
9 0 0 980 20 A p=1000 n=100 SNR=0.5 HM
10 16 0 980 4 A p=1000 n=100 SNR=0.5 HMP80
11 0 58 922 20 C p=1000 n=100 SNR=0.5 HF
12 0 58 922 20 C p=1000 n=100 SNR=0.5 HM
13 17 13 967 3 C p=1000 n=100 SNR=0.5 HMP80
14 0 0 980 20 B p=1000 n=100 SNR=0.5 HF
15 0 0 980 20 B p=1000 n=100 SNR=0.5 HM
In [363]: df['data_group'] = df['data'].str.slice(0,1)
一旦你有了一个列来标识每一组行,下面的代码(使用pandas的groupby功能)会把'data'行转换成列,并将结果写入一个以LaTeX格式保存的文本文件中。
In [377]: with open('latex_table.txt', 'w') as f:
...: header = True
...: for _, df_gb in df.groupby('data_group'):
...: df_gb = df_gb.drop('data_group', axis=1)
...: df_gb = df_gb.pivot(index='method', columns='data')
...: df_gb.columns = df_gb.columns.sortlevel(1)[0]
...: df_gb.to_latex(f, header=header)