首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用tabulate打印多索引数据帧

使用tabulate打印多索引数据帧
EN

Stack Overflow用户
提问于 2021-11-18 02:01:49
回答 1查看 59关注 0票数 1

如何打印如下所示的多索引数据帧:

代码语言:javascript
复制
import numpy as np
import tabulate
import pandas as pd


df = pd.DataFrame(np.random.randn(4, 3),
                  index=pd.MultiIndex.from_product([["foo", "bar"],
                                                    ["one", "two"]]),
                  columns=list("ABC"))

因此,Multindex的两个级别显示为单独的列,几乎与pandas本身打印它的方式相同:

代码语言:javascript
复制
In [16]: df
Out[16]: 
                A         B         C
foo one -0.040337  0.653915 -0.359834
    two  0.271542  1.328517  1.704389
bar one -1.246009  0.087229  0.039282
    two -1.217514  0.721025 -0.017185

但是,打印列表如下所示:

代码语言:javascript
复制
In [28]: print(tabulate.tabulate(df, tablefmt="github", headers="keys", showindex="always"))
|                |          A |         B |          C |
|----------------|------------|-----------|------------|
| ('foo', 'one') | -0.0403371 | 0.653915  | -0.359834  |
| ('foo', 'two') |  0.271542  | 1.32852   |  1.70439   |
| ('bar', 'one') | -1.24601   | 0.0872285 |  0.039282  |
| ('bar', 'two') | -1.21751   | 0.721025  | -0.0171852 |
EN

回答 1

Stack Overflow用户

发布于 2021-11-18 03:47:55

MultiIndexes在内部是由元组表示的,所以tabulate向您展示了正确的东西。

如果你想要像列一样的显示,最简单的方法是先reset_index

代码语言:javascript
复制
print(tabulate.tabulate(df.reset_index().rename(columns={'level_0':'', 'level_1': ''}), tablefmt="github", headers="keys", showindex=False))

输出:

代码语言:javascript
复制
|     |     |         A |         B |         C |
|-----|-----|-----------|-----------|-----------|
| foo | one | -0.108977 |  2.03593  |  1.11258  |
| foo | two |  0.65117  | -1.48314  |  0.391379 |
| bar | one | -0.660148 |  1.34875  | -1.10848  |
| bar | two |  0.561418 |  0.762137 |  0.723432 |

或者,您可以将MultiIndex修改为单个索引:

代码语言:javascript
复制
df2 = df.copy()
df2.index = df.index.map(lambda x: '|'.join(f'{e:>5} ' for e in x))

print(tabulate.tabulate(df2.rename_axis('index'), tablefmt="github", headers="keys", showindex="always"))

输出:

代码语言:javascript
复制
| index      |         A |         B |         C |
|------------|-----------|-----------|-----------|
| foo |  one | -0.108977 |  2.03593  |  1.11258  |
| foo |  two |  0.65117  | -1.48314  |  0.391379 |
| bar |  one | -0.660148 |  1.34875  | -1.10848  |
| bar |  two |  0.561418 |  0.762137 |  0.723432 |
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70013696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档