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

时间:2015-11-14 16:42:38

标签: python excel pandas

DataFrame MultiIndex正在踢我的屁股。经过一段时间的努力,我能够使用此代码创建一个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文件时,这就是我得到的。 enter image description here

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

这是我尝试制作的图片 enter image description here

我猜这个问题与我创建多索引列的方式有关,但我无法弄清问题是什么。

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

2 个答案:

答案 0 :(得分:1)

这对itertools.product很有用。请在您的multiindex创建中尝试此操作:

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(将 index 命名为)(不幸的是,没有任何名为MultiColumns的存在澄清这种混乱)。您需要分别创建索引(单级正常pandas.Index)和您的列(两级pandas.MultiIndex),如上所述,您应该在编写时获得预期的行为优秀。

答案 1 :(得分:1)

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

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