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

Python 将多索引数据框写入Excel文件,python,excel,pandas,Python,Excel,Pandas,DataFrame多索引正在踢我的屁股。经过一段时间的努力,我终于能够用这段代码创建一个MutliIndex数据帧 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

DataFrame多索引正在踢我的屁股。经过一段时间的努力,我终于能够用这段代码创建一个MutliIndex数据帧

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中的列,所有数据都在那里

这是我试图创建的图像

我猜问题与我创建多索引列的方式有关,但我不知道问题出在哪里

我正在Mac上运行python 2.7。
感谢您的输入。

这是
itertools.product
的一个很好的用途。请在创建多索引时尝试以下操作:

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
)

问题是:在构建列的多索引时包含了zip(命名索引)(不幸的是,没有所谓的
MultiColumns
来消除这种混淆)。如上所述,您需要分别创建索引(这是一个单级普通
pandas.Index
)和列(这是一个两级
pandas.multi-Index
),在编写excel时,您应该会得到预期的行为。

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


这似乎是实现代码的一种更“正确”的方法,但它并不能解决问题。@Adrian啊,我错误地阅读了OP的多索引结构/认为它是基于我的误读创建了额外的值。升级到开发版本解决了这个问题。谢谢