Pandas中稀疏多级索引显示是否为Bug?(附IPython环境信息)
疑问:双列多级索引未稀疏显示是否属于Pandas Bug?
先还原你的场景:在IPython 6.2.1、Python 3.6.4环境下执行这段代码:
import pandas as pd from io import StringIO data = """ code name typ ntf A5411 WD AF A5411 WD AF 210194618 B5498 SH NC B5498 SH NC 210213014 """ df = pd.read_table(StringIO(data))
执行df.set_index(['name','code'])后,输出里的code索引在同一name分组下重复显示:
typ ntf name code WD A5411 AF NaN A5411 AF 210194618.0 SH B5498 NC NaN B5498 NC 210213014.0
而你期望的是像三级索引那样的稀疏显示效果:
ntf name code typ WD A5411 AF NaN AF 210194618.0 SH B5498 NC NaN NC 210213014.0
嘿,这完全不是Pandas的Bug,而是它设计好的索引显示逻辑!
原因很直观:Pandas在展示多级索引的DataFrame时,只会对除最后一级之外的前序重复索引层级做空白省略——最后一级索引不管和上一行值重不重复,都会完整显示,用来明确标记每一行的索引位置。
在你的两级索引案例里,code是索引的最后一级,所以哪怕它和上一行完全相同,也会被显示出来;而三级索引时,typ是最后一级,前两级name和code因为连续重复,就会被稀疏隐藏。
如果真的想让两级索引也实现类似的稀疏效果,其实可以用个小技巧:比如临时把最后一级索引转成列,或者加个占位的空索引层级,但说实话,默认的显示方式其实更合理——当只有两级索引时,最后一级是区分行的关键标识(哪怕索引本身重复),显示出来能避免你混淆行的定位。
内容的提问来源于stack exchange,提问作者ZY Huang




