多级列索引出现 ‘MultiIndex‘ object has no attribute ‘labels‘

使用openpyxl在做一份分析报表的时候,所生产的DataFrame的列是多级索引的列,通过dataframe_to_rows将DataFrame转化为ws对象的时候,发现出现了数据的报错

for r in dataframe_to_rows(df, index=False, header=True):
    ws.append(r)

 报错内容如下:

 'MultiIndex' object has no attribute 'labels'

通过源码,发现源码是这么写的,但是自己试了一下,发现我的版本并没与df.columns.labels这个属性~~

   if header:
        if df.columns.nlevels > 1:
            rows = expand_levels(df.columns.levels, df.columns.labels)
        else:
            rows = [list(df.columns.values)]
        for row in rows:
            n = []
            for v in row:
                if isinstance(v, numpy.datetime64):
                    v = Timestamp(v)
                n.append(v)
            row = n
            if index:
                row = [None]*df.index.nlevels + row
            yield row

由于之前卸载过pandas又重新安装,一度以为是我之前安装的问题。后来找其他地方的文档一看,发现部分地方确实能找到这个属性,大概应该是版本问题。

df.columns.labels这个属性本身是表示对应的标签值分别出现几次,后来尝试自己重构索引内容的样式,也一直行不通。最后发现本身我df.columns.codes这个属性,含义一样,遂把源码中的df.columns.labels替换成df.columns.codes,重启python,代码重跑,顺利编译通过。

rows = expand_levels(df.columns.levels, df.columns.codes)

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值