将多索引数据框写入Excel文件

DataFrame MultiIndex踢我的屁股。 在挣扎了很长一段时间后,我能够用这段代码创build一个MutliIndex DataFrame

columns = pd.MultiIndex.from_tuples([('Zip', ''), ('All Properties', 'Avg List Price'),('All Properties', 'Median List Price'), ('3 Bedroom', 'Avg List Price'),('3 Bedroom', 'Median List Price'), ('2 Bedroom', 'Avg List Price'),('2 Bedroom', 'Median List Price'), ('1 Bedroom', 'Avg List Price'),('1 Bedroom', 'Median List Price')]) data[0] = ['11111', 'Val1', 'Val2', 'Val3', 'Val4', 'Val5', 'Val6', 'Val7', 'Val8'] df = pd.DataFrame(data, columns=columns) 

一切看起来都很好,直到我试图写入一个Excel文件

 writer = pd.ExcelWriter('testData.xlsx', engine='openpyxl') df.to_excel(writer, 'Sheet1') writer.save() 

当我打开excel文件,这是我得到的。 在这里输入图像说明

如果我在Excel中取消列,所有的数据都在那里。

这是我想要创build的图像 在这里输入图像说明

我猜这个问题与我创build多索引列的方式有关,但是我不知道问题是什么。

我在Mac上运行Python 2.7。 感谢您的任何意见。

这是一个将在版本0.17.1中修复的bug,或者你可以使用engine='xlsxwriter'

https://github.com/pydata/pandas/pull/11328

这对itertools.product非常有用。 试试这个,而不是在你的多索引创build:

 from itertools import product cols = product( ['All Properties', '3 Bedroom', '2 Bedroom', '1 Bedroom'], ['Avg List Price', 'Median List Price'] ) columns = pd.MultiIndex.from_tuples(list(cols)) ind = pd.Index(['11111'], name='zip') vals = ['Val1', 'Val2', 'Val3', 'Val4', 'Val5', 'Val6', 'Val7', 'Val8'] df = pd.DataFrame( vals, index=ind, columns=columns ) 

问题是:你在你的的MultiIndex的构造中包含了zip(它为你的索引命名)(不幸的是,不存在任何叫做MultiColumns东西来清除这个混淆)。 你需要像上面一样分别创build你的索引(这是一个普通的pandas.Index )和你的列(这是一个两级pandas.MultiIndex ),你应该在写excel的时候得到预期的行为。