print(tabulate(...)) 漂亮地打印 multiIndex pandas ?
print(tabulate(...)) to pretty print multiIndex pandas ?
假设我有一个 pandas 数据框:
import numpy as np
import pandas as pd
from tabulate import tabulate
A = pd.DataFrame(np.random.randint(0,10,(3,6)), index= ['uno', 'dos', 'tres'])
A.columns = ['A','B','C','D','E','F']
A.index.names = ['type']
A.columns.names= ['group']
h = [A.index.names[0] +'/'+ A.columns.names[0]] + list(A.columns)
print(tabulate(A, headers= h, tablefmt= 'grid'))
给出:
+--------------+-----+-----+-----+-----+-----+-----+
| type/group | A | B | C | D | E | F |
+==============+=====+=====+=====+=====+=====+=====+
| uno | 3 | 1 | 6 | 0 | 7 | 0 |
+--------------+-----+-----+-----+-----+-----+-----+
| dos | 9 | 5 | 3 | 0 | 6 | 6 |
+--------------+-----+-----+-----+-----+-----+-----+
| tres | 6 | 7 | 4 | 6 | 8 | 4 |
+--------------+-----+-----+-----+-----+-----+-----+
现在添加一层:
iterable = [['A', 'B'], ['AA', 'BB', 'CC']]
A.columns = pd.MultiIndex.from_product(iterable,
names= ['group', 'subgroup'])
A.index.names = ['type']
将使用打印语句给出:
group A B
subgroup AA BB CC AA BB CC
type
uno 3 1 6 0 7 0
dos 9 5 3 0 6 6
tres 6 7 4 6 8 4
通常,这在 pweave 等文档中表现不佳。
我如何使用 print(tabulate(...)) ,例如我将每个组和子组显示在单独的行上?
谢谢
使用 tabulate 版本 0.8.1 或更高版本,
import numpy as np
import pandas as pd
from tabulate import tabulate
A = pd.DataFrame(np.random.randint(0,10,(3,6)), index= ['uno', 'dos', 'tres'])
A.columns = ['A','B','C','D','E','F']
A.index.names = ['type']
A.columns.names= ['group']
iterable = [['A', 'B'], ['AA', 'BB', 'CC']]
A.columns = pd.MultiIndex.from_product(iterable, names= ['group', 'subgroup'])
h = [A.index.names[0] +'/'+ A.columns.names[0]] + list(map('\n'.join, A.columns.tolist()))
print(tabulate(A, headers= h, tablefmt= 'grid'))
产量
+--------------+------+------+------+------+------+------+
| type/group | A | A | A | B | B | B |
| | AA | BB | CC | AA | BB | CC |
+==============+======+======+======+======+======+======+
| uno | 8 | 4 | 3 | 3 | 4 | 2 |
+--------------+------+------+------+------+------+------+
| dos | 1 | 1 | 1 | 9 | 8 | 9 |
+--------------+------+------+------+------+------+------+
| tres | 0 | 4 | 3 | 6 | 1 | 7 |
+--------------+------+------+------+------+------+------+
假设我有一个 pandas 数据框:
import numpy as np
import pandas as pd
from tabulate import tabulate
A = pd.DataFrame(np.random.randint(0,10,(3,6)), index= ['uno', 'dos', 'tres'])
A.columns = ['A','B','C','D','E','F']
A.index.names = ['type']
A.columns.names= ['group']
h = [A.index.names[0] +'/'+ A.columns.names[0]] + list(A.columns)
print(tabulate(A, headers= h, tablefmt= 'grid'))
给出:
+--------------+-----+-----+-----+-----+-----+-----+
| type/group | A | B | C | D | E | F |
+==============+=====+=====+=====+=====+=====+=====+
| uno | 3 | 1 | 6 | 0 | 7 | 0 |
+--------------+-----+-----+-----+-----+-----+-----+
| dos | 9 | 5 | 3 | 0 | 6 | 6 |
+--------------+-----+-----+-----+-----+-----+-----+
| tres | 6 | 7 | 4 | 6 | 8 | 4 |
+--------------+-----+-----+-----+-----+-----+-----+
现在添加一层:
iterable = [['A', 'B'], ['AA', 'BB', 'CC']]
A.columns = pd.MultiIndex.from_product(iterable,
names= ['group', 'subgroup'])
A.index.names = ['type']
将使用打印语句给出:
group A B
subgroup AA BB CC AA BB CC
type
uno 3 1 6 0 7 0
dos 9 5 3 0 6 6
tres 6 7 4 6 8 4
通常,这在 pweave 等文档中表现不佳。
我如何使用 print(tabulate(...)) ,例如我将每个组和子组显示在单独的行上?
谢谢
使用 tabulate 版本 0.8.1 或更高版本,
import numpy as np
import pandas as pd
from tabulate import tabulate
A = pd.DataFrame(np.random.randint(0,10,(3,6)), index= ['uno', 'dos', 'tres'])
A.columns = ['A','B','C','D','E','F']
A.index.names = ['type']
A.columns.names= ['group']
iterable = [['A', 'B'], ['AA', 'BB', 'CC']]
A.columns = pd.MultiIndex.from_product(iterable, names= ['group', 'subgroup'])
h = [A.index.names[0] +'/'+ A.columns.names[0]] + list(map('\n'.join, A.columns.tolist()))
print(tabulate(A, headers= h, tablefmt= 'grid'))
产量
+--------------+------+------+------+------+------+------+
| type/group | A | A | A | B | B | B |
| | AA | BB | CC | AA | BB | CC |
+==============+======+======+======+======+======+======+
| uno | 8 | 4 | 3 | 3 | 4 | 2 |
+--------------+------+------+------+------+------+------+
| dos | 1 | 1 | 1 | 9 | 8 | 9 |
+--------------+------+------+------+------+------+------+
| tres | 0 | 4 | 3 | 6 | 1 | 7 |
+--------------+------+------+------+------+------+------+