使用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)