【问题标题】:How can I preserve a pandas multi-index between a to_excel() and a read_excel()?如何在 to_excel() 和 read_excel() 之间保留 pandas 多索引?
【发布时间】:2015-06-23 02:52:14
【问题描述】:

根据read_excel 的pandas 文档,我可以将索引列名称放在单独的行上,然后该方法将哪些列应该用作索引。

我想从一个可以读取的多索引数据框创建一个 Excel 文件,但我不知道如何让 pandas 以这样的方式写入 to_excel 以创建这个额外的行(来自多索引数据框)。

我无法想象将多索引数据框存储为 Excel 工作表,然后再将其拉回是一种不常见的用例,所以我想知道我是否还没有弄清楚如何做到这一点.

这是一个数据框示例,我想在回读之前在 Excel 中“冻结”,而无需告诉 read_excel 哪些列是索引:

ipdb> my_df
                             Date         Amount
Rec Section             Row                         
0   Top Section         2    2015-05-01      -105.00
1   Middle Section      3    2015-05-04     90247.60
2   Middle Section      4    2015-05-05     -2992.99
3   Bottom Section      5    2015-05-08      -800.00

在我的示例中,有三个索引列:Rec、Section 和 Row。

当我将它写入 Excel 然后再读回时,我不想告诉它这个。由于 read_excel 似乎有一种方法可以在索引名称出现在单独的行时推断它们,我想让它弄清楚(假设我正确编写了 Excel 文件)。

我错过了什么?

【问题讨论】:

  • 请发布您的数据框的示例代码(简化)。

标签: python excel pandas


【解决方案1】:

我在尝试将数据透视表写入 Excel 时遇到了同样的问题。我可以通过修改../pandas/core 中的frame.py 文件来实现这一点。将 if self.columns.nlevels > 1 更改为 if self.columns.nlevels > 1 and not index 得到了我需要的东西。

由于Pandas 仍然不支持此功能,您可能仍会遇到有趣的输出。此外,这也可能无法解决read_excel 的问题。希望这会有所帮助!

我在他的GitHub comment 中引用了“onesandzeros”。

【讨论】:

  • 欢迎来到 SO 并感谢您发布一个好的答案。作为一个仅供参考,我添加了反引号来格式化您的代码重新格式化您的链接(我的编辑在经过同行评审之前不会显示)。
  • 哦,太棒了。谢谢理查德,我一定会以类似的方式格式化我未来的答案! :)
  • 不客气。弄清楚 SO 上的小格式细节可能很困难。 :)
猜你喜欢
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 2016-12-16
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
  • 2018-09-18
相关资源
最近更新 更多