【发布时间】:2013-01-22 22:55:49
【问题描述】:
这是此问题答案的后续问题:
pandas performance issue - need help to optimize
以下建议有效:
df = DataFrame(np.arange(20).reshape(5,4))
df2 = df.set_index(keys=[0,1,2])
df2.ix[(4,5,6)]
用于使用 MultiIndex
所以我创建了一个文件 sample_data.csv,如下所示:
col1,col2,year,amount
111111,3.5,2012,700
111112,3.5,2011,600
222221,4.0,2012,222
...
然后我运行了以下内容:
import numpy as np
import pandas as pd
sd=pd.read_csv('sample_data.csv')
sd2=sd.set_index(keys=['col2','year'])
sd2.ix[(4.0,2012)]
但这会产生以下错误: IndexError: 索引超出范围
任何想法为什么它在前一种情况下有效但在后一种情况下无效? 这是错误的样子:
IndexError Traceback (most recent call last)
<ipython-input-19-1d72a961db95> in <module>()
----> 1 sd2.ix[(4.0,2012)]
/Library/Python/2.7/site-packages/pandas-0.8.1-py2.7-macosx-10.7-intel.egg/pandas/core/indexing.pyc in __getitem__(self, key)
31 pass
32
---> 33 return self._getitem_tuple(key)
34 else:
35 return self._getitem_axis(key, axis=0)
【问题讨论】:
-
对我来说,您的代码有效。你用的是哪个版本的熊猫?
-
它也适用于我(在 Pd 10.0 中)。如果您使用,也可以跳过 set_index 步骤:pd.read_csv('sample_data.csv', index_col=['col2','year'])
-
熊猫-0.8.1。这就是它失败的原因吗?
-
这可能是 pandas-0.8.1 中的一个错误,我不知道。无论如何,如果可能的话,你最好升级你的版本(熊猫还在快速发展,还有很多新功能)
-
我切换到使用 pandas 10,但仍然遇到同样的错误。您是否使用与我在上面使用的表达式相同的表达式,即 sd2.ix[(4.0,2012)]