df.append()展平MultiIndex ......是吗?

时间:2015-09-07 13:52:14

标签: python pandas

浏览了与附加到pandas数据帧相关的其他线程后,我逐行阅读了concat and appendsetting with enlargement,但仍然有这个有趣的问题我在哪里创建一个带有{的空DF {1}}然后附加到MultiIndexMultIndex似乎被展平为正常Index。要返回MultiIndex,在我所有行追加的末尾,我必须重置索引。这是否意味着以这种方式工作,还是我以一种奇怪的方式解决这个问题?

我使用的是Pandas 0.16.2。 NumPy为1.9.2。 Python 2.7.3

~$ python
Python 2.7.3 (default, Apr 10 2013, 05:46:21) 
[GCC 4.6.3] on linux2
>>> import numpy as np
>>> import pandas as pd
>>> np.__version__
'1.9.2'
>>> pd.__version__
'0.16.2'

Ubuntu版本(在VirtualBox上运行)是

~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.3 LTS
Release:    12.04
Codename:   precise

下面的例子来自熊猫MultiIndex文档,最后我自己的一点点展示了我所看到的......

>>> import numpy as np
>>> import pandas as pd

>>> colMultiIndex = pd.MultiIndex.from_product([ ["bar", "baz", "foo", "qux"], ["one", "two"] ])
>>> df = pd.DataFrame(np.random.randn(3,8), index = ["A", "B", "C"], columns=colMultiIndex )

检查列我得到了MultiIndex,因为我期待并且我可以使用"外部"列名:

>>> print df.columns
MultiIndex(levels=[[u'bar', u'baz', u'foo', u'qux'], [u'one', u'two']],
           labels=[[0, 0, 1, 1, 2, 2, 3, 3], [0, 1, 0, 1, 0, 1, 0, 1]])

所以,现在我追加另一行。现在,在这里,也许我正在关于时尚的这一轮做这个?我问的原因是Pandas似乎将MultiIndex折叠为Index ......

>>> df2 = df.append(pd.Series(np.random.randn(1,8)[0], index=colMultiIndex), ignore_index=True)
>>> print df2.columns
Index([(u'bar', u'one'), (u'bar', u'two'), (u'baz', u'one'), (u'baz', u'two'),
       (u'foo', u'one'), (u'foo', u'two'), (u'qux', u'one'), (u'qux', u'two')],
      dtype='object')

以上显示了这个问题。我不能再按照我的期望索引了。要解决这个问题,我必须做到以下几点:

>>> df2.columns = colMultiIndex
>>> print df2.columns
MultiIndex(levels=[[u'bar', u'baz', u'foo', u'qux'], [u'one', u'two']],
           labels=[[0, 0, 1, 1, 2, 2, 3, 3], [0, 1, 0, 1, 0, 1, 0, 1]])

我应该这样做还是我做错了?我一直在谷歌搜索,但无法找到解决方案,并且真的不明白为什么追加感到不高兴。

修改

非常有趣的是,如果我在我的Windows机器上这样做,这是有效的...

C:\Users\jimbo>python
Python 2.7.8 |Anaconda 2.1.0 (32-bit)| (default, Jul  2 2014, 15:13:35) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://binstar.org
>>> import numpy as np
>>> import pandas as pd
>>> np.__version__
'1.9.0'
>>> pd.__version__
'0.14.1'
>>> colMultiIndex = pd.MultiIndex.from_product([ ["bar", "baz", "foo", "qux"], ["one", "two"] ])
>>> df = pd.DataFrame(np.random.randn(3,8), index = ["A", "B", "C"], columns=colMultiIndex )
>>> print type(df.columns)
<class 'pandas.core.index.MultiIndex'>

>>> df2 = df.append(pd.Series(np.random.randn(1,8)[0], index=colMultiIndex), ignore_index=True)    
>>> print type(df2.columns)
<class 'pandas.core.index.MultiIndex'>

即使将库更新为numpy的1.9.2和Windows框中的pandas的0.16.2,仍然会产生相同的结果......按预期工作。

0 个答案:

没有答案