浏览了与附加到pandas数据帧相关的其他线程后,我逐行阅读了concat and append和setting with enlargement,但仍然有这个有趣的问题我在哪里创建一个带有{的空DF {1}}然后附加到MultiIndex
,MultIndex
似乎被展平为正常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,仍然会产生相同的结果......按预期工作。