01. A basic TableOne demonstration

This script provides a practical demonstration of the tableone Python library, a tool designed to easily create the table of descriptive statistics commonly found in medical and scientific research papers. Using the well-known primary biliary cirrhosis (pbc) dataset, it walks through the essential steps of data preparation, including specifying continuous, categorical, and non-normally distributed variables. The script then generates a summary table, grouped by a treatment variable, and showcases the library’s versatility by exporting the table to various formats, including HTML, GitHub-flavored Markdown, LaTeX, and Microsoft Excel.

17 # Libraries
18 import pandas as pd
19
20 from tableone import TableOne
21
22 # Load data
23 url="https://raw.githubusercontent.com/tompollard/data/master/primary-biliary-cirrhosis/pbc.csv"
24 data=pd.read_csv(url)
25
26 # List of columns
27 columns = [
28     'age', 'bili', 'albumin', 'ast',
29     'platelet', 'protime', 'ascites',
30     'hepato', 'spiders', 'edema', 'sex',
31     'trt'
32 ]
33
34 # Specify categorical columns
35 categorical = ['ascites','hepato','edema','sex','spiders','trt']
36
37 # Define groupby and not normal
38 groupby = 'trt'
39 nonnormal = ['bili']
40
41 # Create descriptive table
42 mytable = TableOne(data, columns=columns, categorical=categorical,
43     groupby=groupby, nonnormal=nonnormal, pval=True)

Out:

C:\Users\kelda\Desktop\repositories\virtualenvs\venv-py311-psc\Lib\site-packages\tableone\statistics.py:160: UserWarning:

No P-Value was computed for ast due to the low number of observations.

C:\Users\kelda\Desktop\repositories\virtualenvs\venv-py311-psc\Lib\site-packages\numpy\lib\nanfunctions.py:1879: RuntimeWarning:

Degrees of freedom <= 0 for slice.

C:\Users\kelda\Desktop\repositories\virtualenvs\venv-py311-psc\Lib\site-packages\numpy\lib\nanfunctions.py:1384: RuntimeWarning:

All-NaN slice encountered

C:\Users\kelda\Desktop\repositories\virtualenvs\venv-py311-psc\Lib\site-packages\numpy\lib\nanfunctions.py:1384: RuntimeWarning:

All-NaN slice encountered

C:\Users\kelda\Desktop\repositories\virtualenvs\venv-py311-psc\Lib\site-packages\tableone\tableone.py:596: RuntimeWarning:

Mean of empty slice

C:\Users\kelda\Desktop\repositories\virtualenvs\venv-py311-psc\Lib\site-packages\numpy\lib\nanfunctions.py:1879: RuntimeWarning:

Degrees of freedom <= 0 for slice.
47 mytable.tableone
Grouped by trt
Missing Overall 1.0 2.0 None P-Value
n 418 158 154 106
age, mean (SD) 0 50.7 (10.4) 51.4 (11.0) 48.6 (10.0) 52.9 (9.8) 0.003
bili, median [Q1,Q3] 0 1.4 [0.8,3.4] 1.4 [0.8,3.2] 1.3 [0.7,3.6] 1.4 [0.7,3.1] 0.972
albumin, mean (SD) 0 3.5 (0.4) 3.5 (0.4) 3.5 (0.4) 3.4 (0.4) 0.175
ast, mean (SD) 106 122.6 (56.7) 120.2 (54.5) 125.0 (58.9) nan (nan)
platelet, mean (SD) 11 257.0 (98.3) 258.8 (100.3) 265.2 (90.7) 241.7 (105.4) 0.175
protime, mean (SD) 2 10.7 (1.0) 10.7 (0.9) 10.8 (1.1) 10.8 (1.1) 0.438
ascites, n (%) 0.0 288 (68.9) 144 (91.1) 144 (93.5) 0 (0.0) <0.001
1.0 24 (5.7) 14 (8.9) 10 (6.5) 0 (0.0)
None 106 (25.4) 0 (0.0) 0 (0.0) 106 (100.0)
hepato, n (%) 0.0 152 (36.4) 85 (53.8) 67 (43.5) 0 (0.0) <0.001
1.0 160 (38.3) 73 (46.2) 87 (56.5) 0 (0.0)
None 106 (25.4) 0 (0.0) 0 (0.0) 106 (100.0)
spiders, n (%) 0.0 222 (53.1) 113 (71.5) 109 (70.8) 0 (0.0) <0.001
1.0 90 (21.5) 45 (28.5) 45 (29.2) 0 (0.0)
None 106 (25.4) 0 (0.0) 0 (0.0) 106 (100.0)
edema, n (%) 0.0 354 (84.7) 132 (83.5) 131 (85.1) 91 (85.8) 0.066
0.5 44 (10.5) 16 (10.1) 13 (8.4) 15 (14.2)
1.0 20 (4.8) 10 (6.3) 10 (6.5) 0 (0.0)
sex, n (%) f 374 (89.5) 137 (86.7) 139 (90.3) 98 (92.5) 0.304
m 44 (10.5) 21 (13.3) 15 (9.7) 8 (7.5)
trt, n (%) 1.0 158 (37.8) 158 (100.0) 0 (0.0) 0 (0.0) <0.001
2.0 154 (36.8) 0 (0.0) 154 (100.0) 0 (0.0)
None 106 (25.4) 0 (0.0) 0 (0.0) 106 (100.0)


Convert to html

51 html = mytable.to_html()
52 html

Out:

'<table border="1" class="dataframe">\n  <thead>\n    <tr>\n      <th></th>\n      <th></th>\n      <th colspan="6" halign="left">Grouped by trt</th>\n    </tr>\n    <tr>\n      <th></th>\n      <th></th>\n      <th>Missing</th>\n      <th>Overall</th>\n      <th>1.0</th>\n      <th>2.0</th>\n      <th>None</th>\n      <th>P-Value</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>n</th>\n      <th></th>\n      <td></td>\n      <td>418</td>\n      <td>158</td>\n      <td>154</td>\n      <td>106</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>age, mean (SD)</th>\n      <th></th>\n      <td>0</td>\n      <td>50.7 (10.4)</td>\n      <td>51.4 (11.0)</td>\n      <td>48.6 (10.0)</td>\n      <td>52.9 (9.8)</td>\n      <td>0.003</td>\n    </tr>\n    <tr>\n      <th>bili, median [Q1,Q3]</th>\n      <th></th>\n      <td>0</td>\n      <td>1.4 [0.8,3.4]</td>\n      <td>1.4 [0.8,3.2]</td>\n      <td>1.3 [0.7,3.6]</td>\n      <td>1.4 [0.7,3.1]</td>\n      <td>0.972</td>\n    </tr>\n    <tr>\n      <th>albumin, mean (SD)</th>\n      <th></th>\n      <td>0</td>\n      <td>3.5 (0.4)</td>\n      <td>3.5 (0.4)</td>\n      <td>3.5 (0.4)</td>\n      <td>3.4 (0.4)</td>\n      <td>0.175</td>\n    </tr>\n    <tr>\n      <th>ast, mean (SD)</th>\n      <th></th>\n      <td>106</td>\n      <td>122.6 (56.7)</td>\n      <td>120.2 (54.5)</td>\n      <td>125.0 (58.9)</td>\n      <td>nan (nan)</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>platelet, mean (SD)</th>\n      <th></th>\n      <td>11</td>\n      <td>257.0 (98.3)</td>\n      <td>258.8 (100.3)</td>\n      <td>265.2 (90.7)</td>\n      <td>241.7 (105.4)</td>\n      <td>0.175</td>\n    </tr>\n    <tr>\n      <th>protime, mean (SD)</th>\n      <th></th>\n      <td>2</td>\n      <td>10.7 (1.0)</td>\n      <td>10.7 (0.9)</td>\n      <td>10.8 (1.1)</td>\n      <td>10.8 (1.1)</td>\n      <td>0.438</td>\n    </tr>\n    <tr>\n      <th rowspan="3" valign="top">ascites, n (%)</th>\n      <th>0.0</th>\n      <td></td>\n      <td>288 (68.9)</td>\n      <td>144 (91.1)</td>\n      <td>144 (93.5)</td>\n      <td>0 (0.0)</td>\n      <td>&lt;0.001</td>\n    </tr>\n    <tr>\n      <th>1.0</th>\n      <td></td>\n      <td>24 (5.7)</td>\n      <td>14 (8.9)</td>\n      <td>10 (6.5)</td>\n      <td>0 (0.0)</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>None</th>\n      <td></td>\n      <td>106 (25.4)</td>\n      <td>0 (0.0)</td>\n      <td>0 (0.0)</td>\n      <td>106 (100.0)</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th rowspan="3" valign="top">hepato, n (%)</th>\n      <th>0.0</th>\n      <td></td>\n      <td>152 (36.4)</td>\n      <td>85 (53.8)</td>\n      <td>67 (43.5)</td>\n      <td>0 (0.0)</td>\n      <td>&lt;0.001</td>\n    </tr>\n    <tr>\n      <th>1.0</th>\n      <td></td>\n      <td>160 (38.3)</td>\n      <td>73 (46.2)</td>\n      <td>87 (56.5)</td>\n      <td>0 (0.0)</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>None</th>\n      <td></td>\n      <td>106 (25.4)</td>\n      <td>0 (0.0)</td>\n      <td>0 (0.0)</td>\n      <td>106 (100.0)</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th rowspan="3" valign="top">spiders, n (%)</th>\n      <th>0.0</th>\n      <td></td>\n      <td>222 (53.1)</td>\n      <td>113 (71.5)</td>\n      <td>109 (70.8)</td>\n      <td>0 (0.0)</td>\n      <td>&lt;0.001</td>\n    </tr>\n    <tr>\n      <th>1.0</th>\n      <td></td>\n      <td>90 (21.5)</td>\n      <td>45 (28.5)</td>\n      <td>45 (29.2)</td>\n      <td>0 (0.0)</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>None</th>\n      <td></td>\n      <td>106 (25.4)</td>\n      <td>0 (0.0)</td>\n      <td>0 (0.0)</td>\n      <td>106 (100.0)</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th rowspan="3" valign="top">edema, n (%)</th>\n      <th>0.0</th>\n      <td></td>\n      <td>354 (84.7)</td>\n      <td>132 (83.5)</td>\n      <td>131 (85.1)</td>\n      <td>91 (85.8)</td>\n      <td>0.066</td>\n    </tr>\n    <tr>\n      <th>0.5</th>\n      <td></td>\n      <td>44 (10.5)</td>\n      <td>16 (10.1)</td>\n      <td>13 (8.4)</td>\n      <td>15 (14.2)</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>1.0</th>\n      <td></td>\n      <td>20 (4.8)</td>\n      <td>10 (6.3)</td>\n      <td>10 (6.5)</td>\n      <td>0 (0.0)</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th rowspan="2" valign="top">sex, n (%)</th>\n      <th>f</th>\n      <td></td>\n      <td>374 (89.5)</td>\n      <td>137 (86.7)</td>\n      <td>139 (90.3)</td>\n      <td>98 (92.5)</td>\n      <td>0.304</td>\n    </tr>\n    <tr>\n      <th>m</th>\n      <td></td>\n      <td>44 (10.5)</td>\n      <td>21 (13.3)</td>\n      <td>15 (9.7)</td>\n      <td>8 (7.5)</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th rowspan="3" valign="top">trt, n (%)</th>\n      <th>1.0</th>\n      <td></td>\n      <td>158 (37.8)</td>\n      <td>158 (100.0)</td>\n      <td>0 (0.0)</td>\n      <td>0 (0.0)</td>\n      <td>&lt;0.001</td>\n    </tr>\n    <tr>\n      <th>2.0</th>\n      <td></td>\n      <td>154 (36.8)</td>\n      <td>0 (0.0)</td>\n      <td>154 (100.0)</td>\n      <td>0 (0.0)</td>\n      <td></td>\n    </tr>\n    <tr>\n      <th>None</th>\n      <td></td>\n      <td>106 (25.4)</td>\n      <td>0 (0.0)</td>\n      <td>0 (0.0)</td>\n      <td>106 (100.0)</td>\n      <td></td>\n    </tr>\n  </tbody>\n</table>'

Lets tabulate for github.

56 print(mytable.tabulate(tablefmt="github"))

Out:

|                      |      | Missing   | Overall       | 1.0           | 2.0           | None          | P-Value   |
|----------------------|------|-----------|---------------|---------------|---------------|---------------|-----------|
| n                    |      |           | 418           | 158           | 154           | 106           |           |
| age, mean (SD)       |      | 0         | 50.7 (10.4)   | 51.4 (11.0)   | 48.6 (10.0)   | 52.9 (9.8)    | 0.003     |
| bili, median [Q1,Q3] |      | 0         | 1.4 [0.8,3.4] | 1.4 [0.8,3.2] | 1.3 [0.7,3.6] | 1.4 [0.7,3.1] | 0.972     |
| albumin, mean (SD)   |      | 0         | 3.5 (0.4)     | 3.5 (0.4)     | 3.5 (0.4)     | 3.4 (0.4)     | 0.175     |
| ast, mean (SD)       |      | 106       | 122.6 (56.7)  | 120.2 (54.5)  | 125.0 (58.9)  | nan (nan)     |           |
| platelet, mean (SD)  |      | 11        | 257.0 (98.3)  | 258.8 (100.3) | 265.2 (90.7)  | 241.7 (105.4) | 0.175     |
| protime, mean (SD)   |      | 2         | 10.7 (1.0)    | 10.7 (0.9)    | 10.8 (1.1)    | 10.8 (1.1)    | 0.438     |
| ascites, n (%)       | 0.0  |           | 288 (68.9)    | 144 (91.1)    | 144 (93.5)    | 0 (0.0)       | <0.001    |
|                      | 1.0  |           | 24 (5.7)      | 14 (8.9)      | 10 (6.5)      | 0 (0.0)       |           |
|                      | None |           | 106 (25.4)    | 0 (0.0)       | 0 (0.0)       | 106 (100.0)   |           |
| hepato, n (%)        | 0.0  |           | 152 (36.4)    | 85 (53.8)     | 67 (43.5)     | 0 (0.0)       | <0.001    |
|                      | 1.0  |           | 160 (38.3)    | 73 (46.2)     | 87 (56.5)     | 0 (0.0)       |           |
|                      | None |           | 106 (25.4)    | 0 (0.0)       | 0 (0.0)       | 106 (100.0)   |           |
| spiders, n (%)       | 0.0  |           | 222 (53.1)    | 113 (71.5)    | 109 (70.8)    | 0 (0.0)       | <0.001    |
|                      | 1.0  |           | 90 (21.5)     | 45 (28.5)     | 45 (29.2)     | 0 (0.0)       |           |
|                      | None |           | 106 (25.4)    | 0 (0.0)       | 0 (0.0)       | 106 (100.0)   |           |
| edema, n (%)         | 0.0  |           | 354 (84.7)    | 132 (83.5)    | 131 (85.1)    | 91 (85.8)     | 0.066     |
|                      | 0.5  |           | 44 (10.5)     | 16 (10.1)     | 13 (8.4)      | 15 (14.2)     |           |
|                      | 1.0  |           | 20 (4.8)      | 10 (6.3)      | 10 (6.5)      | 0 (0.0)       |           |
| sex, n (%)           | f    |           | 374 (89.5)    | 137 (86.7)    | 139 (90.3)    | 98 (92.5)     | 0.304     |
|                      | m    |           | 44 (10.5)     | 21 (13.3)     | 15 (9.7)      | 8 (7.5)       |           |
| trt, n (%)           | 1.0  |           | 158 (37.8)    | 158 (100.0)   | 0 (0.0)       | 0 (0.0)       | <0.001    |
|                      | 2.0  |           | 154 (36.8)    | 0 (0.0)       | 154 (100.0)   | 0 (0.0)       |           |
|                      | None |           | 106 (25.4)    | 0 (0.0)       | 0 (0.0)       | 106 (100.0)   |           |

Lets tabulate for latex.

60 print(mytable.tabulate(tablefmt="latex"))

Out:

\begin{tabular}{llllllll}
\hline
                      &      & Missing   & Overall       & 1.0           & 2.0           & None          & P-Value   \\
\hline
 n                    &      &           & 418           & 158           & 154           & 106           &           \\
 age, mean (SD)       &      & 0         & 50.7 (10.4)   & 51.4 (11.0)   & 48.6 (10.0)   & 52.9 (9.8)    & 0.003     \\
 bili, median [Q1,Q3] &      & 0         & 1.4 [0.8,3.4] & 1.4 [0.8,3.2] & 1.3 [0.7,3.6] & 1.4 [0.7,3.1] & 0.972     \\
 albumin, mean (SD)   &      & 0         & 3.5 (0.4)     & 3.5 (0.4)     & 3.5 (0.4)     & 3.4 (0.4)     & 0.175     \\
 ast, mean (SD)       &      & 106       & 122.6 (56.7)  & 120.2 (54.5)  & 125.0 (58.9)  & nan (nan)     &           \\
 platelet, mean (SD)  &      & 11        & 257.0 (98.3)  & 258.8 (100.3) & 265.2 (90.7)  & 241.7 (105.4) & 0.175     \\
 protime, mean (SD)   &      & 2         & 10.7 (1.0)    & 10.7 (0.9)    & 10.8 (1.1)    & 10.8 (1.1)    & 0.438     \\
 ascites, n (\%)       & 0.0  &           & 288 (68.9)    & 144 (91.1)    & 144 (93.5)    & 0 (0.0)       & \ensuremath{<}0.001    \\
                      & 1.0  &           & 24 (5.7)      & 14 (8.9)      & 10 (6.5)      & 0 (0.0)       &           \\
                      & None &           & 106 (25.4)    & 0 (0.0)       & 0 (0.0)       & 106 (100.0)   &           \\
 hepato, n (\%)        & 0.0  &           & 152 (36.4)    & 85 (53.8)     & 67 (43.5)     & 0 (0.0)       & \ensuremath{<}0.001    \\
                      & 1.0  &           & 160 (38.3)    & 73 (46.2)     & 87 (56.5)     & 0 (0.0)       &           \\
                      & None &           & 106 (25.4)    & 0 (0.0)       & 0 (0.0)       & 106 (100.0)   &           \\
 spiders, n (\%)       & 0.0  &           & 222 (53.1)    & 113 (71.5)    & 109 (70.8)    & 0 (0.0)       & \ensuremath{<}0.001    \\
                      & 1.0  &           & 90 (21.5)     & 45 (28.5)     & 45 (29.2)     & 0 (0.0)       &           \\
                      & None &           & 106 (25.4)    & 0 (0.0)       & 0 (0.0)       & 106 (100.0)   &           \\
 edema, n (\%)         & 0.0  &           & 354 (84.7)    & 132 (83.5)    & 131 (85.1)    & 91 (85.8)     & 0.066     \\
                      & 0.5  &           & 44 (10.5)     & 16 (10.1)     & 13 (8.4)      & 15 (14.2)     &           \\
                      & 1.0  &           & 20 (4.8)      & 10 (6.3)      & 10 (6.5)      & 0 (0.0)       &           \\
 sex, n (\%)           & f    &           & 374 (89.5)    & 137 (86.7)    & 139 (90.3)    & 98 (92.5)     & 0.304     \\
                      & m    &           & 44 (10.5)     & 21 (13.3)     & 15 (9.7)      & 8 (7.5)       &           \\
 trt, n (\%)           & 1.0  &           & 158 (37.8)    & 158 (100.0)   & 0 (0.0)       & 0 (0.0)       & \ensuremath{<}0.001    \\
                      & 2.0  &           & 154 (36.8)    & 0 (0.0)       & 154 (100.0)   & 0 (0.0)       &           \\
                      & None &           & 106 (25.4)    & 0 (0.0)       & 0 (0.0)       & 106 (100.0)   &           \\
\hline
\end{tabular}

Lets tabulate for grid.

64 print(mytable.tabulate(tablefmt="grid"))

Out:

+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
|                      |      | Missing   | Overall       | 1.0           | 2.0           | None          | P-Value   |
+======================+======+===========+===============+===============+===============+===============+===========+
| n                    |      |           | 418           | 158           | 154           | 106           |           |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
| age, mean (SD)       |      | 0         | 50.7 (10.4)   | 51.4 (11.0)   | 48.6 (10.0)   | 52.9 (9.8)    | 0.003     |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
| bili, median [Q1,Q3] |      | 0         | 1.4 [0.8,3.4] | 1.4 [0.8,3.2] | 1.3 [0.7,3.6] | 1.4 [0.7,3.1] | 0.972     |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
| albumin, mean (SD)   |      | 0         | 3.5 (0.4)     | 3.5 (0.4)     | 3.5 (0.4)     | 3.4 (0.4)     | 0.175     |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
| ast, mean (SD)       |      | 106       | 122.6 (56.7)  | 120.2 (54.5)  | 125.0 (58.9)  | nan (nan)     |           |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
| platelet, mean (SD)  |      | 11        | 257.0 (98.3)  | 258.8 (100.3) | 265.2 (90.7)  | 241.7 (105.4) | 0.175     |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
| protime, mean (SD)   |      | 2         | 10.7 (1.0)    | 10.7 (0.9)    | 10.8 (1.1)    | 10.8 (1.1)    | 0.438     |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
| ascites, n (%)       | 0.0  |           | 288 (68.9)    | 144 (91.1)    | 144 (93.5)    | 0 (0.0)       | <0.001    |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
|                      | 1.0  |           | 24 (5.7)      | 14 (8.9)      | 10 (6.5)      | 0 (0.0)       |           |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
|                      | None |           | 106 (25.4)    | 0 (0.0)       | 0 (0.0)       | 106 (100.0)   |           |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
| hepato, n (%)        | 0.0  |           | 152 (36.4)    | 85 (53.8)     | 67 (43.5)     | 0 (0.0)       | <0.001    |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
|                      | 1.0  |           | 160 (38.3)    | 73 (46.2)     | 87 (56.5)     | 0 (0.0)       |           |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
|                      | None |           | 106 (25.4)    | 0 (0.0)       | 0 (0.0)       | 106 (100.0)   |           |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
| spiders, n (%)       | 0.0  |           | 222 (53.1)    | 113 (71.5)    | 109 (70.8)    | 0 (0.0)       | <0.001    |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
|                      | 1.0  |           | 90 (21.5)     | 45 (28.5)     | 45 (29.2)     | 0 (0.0)       |           |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
|                      | None |           | 106 (25.4)    | 0 (0.0)       | 0 (0.0)       | 106 (100.0)   |           |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
| edema, n (%)         | 0.0  |           | 354 (84.7)    | 132 (83.5)    | 131 (85.1)    | 91 (85.8)     | 0.066     |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
|                      | 0.5  |           | 44 (10.5)     | 16 (10.1)     | 13 (8.4)      | 15 (14.2)     |           |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
|                      | 1.0  |           | 20 (4.8)      | 10 (6.3)      | 10 (6.5)      | 0 (0.0)       |           |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
| sex, n (%)           | f    |           | 374 (89.5)    | 137 (86.7)    | 139 (90.3)    | 98 (92.5)     | 0.304     |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
|                      | m    |           | 44 (10.5)     | 21 (13.3)     | 15 (9.7)      | 8 (7.5)       |           |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
| trt, n (%)           | 1.0  |           | 158 (37.8)    | 158 (100.0)   | 0 (0.0)       | 0 (0.0)       | <0.001    |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
|                      | 2.0  |           | 154 (36.8)    | 0 (0.0)       | 154 (100.0)   | 0 (0.0)       |           |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+
|                      | None |           | 106 (25.4)    | 0 (0.0)       | 0 (0.0)       | 106 (100.0)   |           |
+----------------------+------+-----------+---------------+---------------+---------------+---------------+-----------+

Lets tabulate for fancy grid.

68 print(mytable.tabulate(tablefmt="fancy_grid"))

Out:

╒══════════════════════╤══════╤═══════════╤═══════════════╤═══════════════╤═══════════════╤═══════════════╤═══════════╕
│                      │      │ Missing   │ Overall       │ 1.0           │ 2.0           │ None          │ P-Value   │
╞══════════════════════╪══════╪═══════════╪═══════════════╪═══════════════╪═══════════════╪═══════════════╪═══════════╡
│ n                    │      │           │ 418           │ 158           │ 154           │ 106           │           │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│ age, mean (SD)       │      │ 0         │ 50.7 (10.4)   │ 51.4 (11.0)   │ 48.6 (10.0)   │ 52.9 (9.8)    │ 0.003     │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│ bili, median [Q1,Q3] │      │ 0         │ 1.4 [0.8,3.4] │ 1.4 [0.8,3.2] │ 1.3 [0.7,3.6] │ 1.4 [0.7,3.1] │ 0.972     │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│ albumin, mean (SD)   │      │ 0         │ 3.5 (0.4)     │ 3.5 (0.4)     │ 3.5 (0.4)     │ 3.4 (0.4)     │ 0.175     │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│ ast, mean (SD)       │      │ 106       │ 122.6 (56.7)  │ 120.2 (54.5)  │ 125.0 (58.9)  │ nan (nan)     │           │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│ platelet, mean (SD)  │      │ 11        │ 257.0 (98.3)  │ 258.8 (100.3) │ 265.2 (90.7)  │ 241.7 (105.4) │ 0.175     │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│ protime, mean (SD)   │      │ 2         │ 10.7 (1.0)    │ 10.7 (0.9)    │ 10.8 (1.1)    │ 10.8 (1.1)    │ 0.438     │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│ ascites, n (%)       │ 0.0  │           │ 288 (68.9)    │ 144 (91.1)    │ 144 (93.5)    │ 0 (0.0)       │ <0.001    │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│                      │ 1.0  │           │ 24 (5.7)      │ 14 (8.9)      │ 10 (6.5)      │ 0 (0.0)       │           │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│                      │ None │           │ 106 (25.4)    │ 0 (0.0)       │ 0 (0.0)       │ 106 (100.0)   │           │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│ hepato, n (%)        │ 0.0  │           │ 152 (36.4)    │ 85 (53.8)     │ 67 (43.5)     │ 0 (0.0)       │ <0.001    │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│                      │ 1.0  │           │ 160 (38.3)    │ 73 (46.2)     │ 87 (56.5)     │ 0 (0.0)       │           │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│                      │ None │           │ 106 (25.4)    │ 0 (0.0)       │ 0 (0.0)       │ 106 (100.0)   │           │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│ spiders, n (%)       │ 0.0  │           │ 222 (53.1)    │ 113 (71.5)    │ 109 (70.8)    │ 0 (0.0)       │ <0.001    │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│                      │ 1.0  │           │ 90 (21.5)     │ 45 (28.5)     │ 45 (29.2)     │ 0 (0.0)       │           │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│                      │ None │           │ 106 (25.4)    │ 0 (0.0)       │ 0 (0.0)       │ 106 (100.0)   │           │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│ edema, n (%)         │ 0.0  │           │ 354 (84.7)    │ 132 (83.5)    │ 131 (85.1)    │ 91 (85.8)     │ 0.066     │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│                      │ 0.5  │           │ 44 (10.5)     │ 16 (10.1)     │ 13 (8.4)      │ 15 (14.2)     │           │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│                      │ 1.0  │           │ 20 (4.8)      │ 10 (6.3)      │ 10 (6.5)      │ 0 (0.0)       │           │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│ sex, n (%)           │ f    │           │ 374 (89.5)    │ 137 (86.7)    │ 139 (90.3)    │ 98 (92.5)     │ 0.304     │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│                      │ m    │           │ 44 (10.5)     │ 21 (13.3)     │ 15 (9.7)      │ 8 (7.5)       │           │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│ trt, n (%)           │ 1.0  │           │ 158 (37.8)    │ 158 (100.0)   │ 0 (0.0)       │ 0 (0.0)       │ <0.001    │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│                      │ 2.0  │           │ 154 (36.8)    │ 0 (0.0)       │ 154 (100.0)   │ 0 (0.0)       │           │
├──────────────────────┼──────┼───────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────┤
│                      │ None │           │ 106 (25.4)    │ 0 (0.0)       │ 0 (0.0)       │ 106 (100.0)   │           │
╘══════════════════════╧══════╧═══════════╧═══════════════╧═══════════════╧═══════════════╧═══════════════╧═══════════╛

Lets tabulate for markdown

72 print(mytable.tabulate(tablefmt="rst"))

Out:

====================  ====  =========  =============  =============  =============  =============  =========
..                          Missing    Overall        1.0            2.0            None           P-Value
====================  ====  =========  =============  =============  =============  =============  =========
n                                      418            158            154            106
age, mean (SD)              0          50.7 (10.4)    51.4 (11.0)    48.6 (10.0)    52.9 (9.8)     0.003
bili, median [Q1,Q3]        0          1.4 [0.8,3.4]  1.4 [0.8,3.2]  1.3 [0.7,3.6]  1.4 [0.7,3.1]  0.972
albumin, mean (SD)          0          3.5 (0.4)      3.5 (0.4)      3.5 (0.4)      3.4 (0.4)      0.175
ast, mean (SD)              106        122.6 (56.7)   120.2 (54.5)   125.0 (58.9)   nan (nan)
platelet, mean (SD)         11         257.0 (98.3)   258.8 (100.3)  265.2 (90.7)   241.7 (105.4)  0.175
protime, mean (SD)          2          10.7 (1.0)     10.7 (0.9)     10.8 (1.1)     10.8 (1.1)     0.438
ascites, n (%)        0.0              288 (68.9)     144 (91.1)     144 (93.5)     0 (0.0)        <0.001
..                    1.0              24 (5.7)       14 (8.9)       10 (6.5)       0 (0.0)
..                    None             106 (25.4)     0 (0.0)        0 (0.0)        106 (100.0)
hepato, n (%)         0.0              152 (36.4)     85 (53.8)      67 (43.5)      0 (0.0)        <0.001
..                    1.0              160 (38.3)     73 (46.2)      87 (56.5)      0 (0.0)
..                    None             106 (25.4)     0 (0.0)        0 (0.0)        106 (100.0)
spiders, n (%)        0.0              222 (53.1)     113 (71.5)     109 (70.8)     0 (0.0)        <0.001
..                    1.0              90 (21.5)      45 (28.5)      45 (29.2)      0 (0.0)
..                    None             106 (25.4)     0 (0.0)        0 (0.0)        106 (100.0)
edema, n (%)          0.0              354 (84.7)     132 (83.5)     131 (85.1)     91 (85.8)      0.066
..                    0.5              44 (10.5)      16 (10.1)      13 (8.4)       15 (14.2)
..                    1.0              20 (4.8)       10 (6.3)       10 (6.5)       0 (0.0)
sex, n (%)            f                374 (89.5)     137 (86.7)     139 (90.3)     98 (92.5)      0.304
..                    m                44 (10.5)      21 (13.3)      15 (9.7)       8 (7.5)
trt, n (%)            1.0              158 (37.8)     158 (100.0)    0 (0.0)        0 (0.0)        <0.001
..                    2.0              154 (36.8)     0 (0.0)        154 (100.0)    0 (0.0)
..                    None             106 (25.4)     0 (0.0)        0 (0.0)        106 (100.0)
====================  ====  =========  =============  =============  =============  =============  =========

Lets create the outputs folder

76 from pathlib import Path
77 folder_path = Path("./outputs")
78 folder_path.mkdir(parents=True, exist_ok=True)
79 print(f"Folder '{folder_path}' is ready.")
80
81 # Save as latex file
82 mytable.to_latex(folder_path / 'main01-mytable.tex')

Out:

Folder 'outputs' is ready.

Save as xls file

86 mytable.to_excel(folder_path / 'main01-mytable.xlsx')

Total running time of the script: ( 0 minutes 0.575 seconds)

Gallery generated by Sphinx-Gallery