Python 具有重复索引的ix选择的不一致行为
以熊猫数据帧为例Python 具有重复索引的ix选择的不一致行为,python,pandas,Python,Pandas,以熊猫数据帧为例 df = DataFrame({'somedata': [13,24,54]}, index=[1,1,2]) somedata 1 13 1 24 2 54 执行 df.ix[1, 'somedata'] 将返回一个对象 1 13 1 24 Name: somedata, dtype: int64 它有一个索引: df.ix[1, 'somedata'].index Int64Index([1, 1], dtype='int64')
df = DataFrame({'somedata': [13,24,54]}, index=[1,1,2])
somedata
1 13
1 24
2 54
执行
df.ix[1, 'somedata']
将返回一个对象
1 13
1 24
Name: somedata, dtype: int64
它有一个索引:
df.ix[1, 'somedata'].index
Int64Index([1, 1], dtype='int64')
然而,执行
df.ix[2, 'somedata']
将只返回数字54,该数字没有索引:
df.ix[2, 'somedata'].index
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-274-3c6e4b1e6441> in <module>()
----> 1 df.ix[2, 'somedata'].index
AttributeError: 'numpy.int64' object has no attribute 'index'
很抱歉,如果这是一个愚蠢的问题,我在任何地方都找不到答案。如果您传递的是索引列表而不是单个索引,则可以保证您将返回一个系列。换句话说,不是
>>> df.loc[1, 'somedata']
1 13
1 24
Name: somedata, dtype: int64
>>> df.loc[2, 'somedata']
54
你可以用
>>> df.loc[[1], 'somedata']
1 13
1 24
Name: somedata, dtype: int64
>>> df.loc[[2], 'somedata']
2 54
Name: somedata, dtype: int64
(请注意,使用
loc
(或iloc
)通常比使用ix
更好,因为它不那么神奇,尽管这并不是问题的原因。)您可能想进一步说明为什么得到一个带1的序列和一个带2的标量;低,因为索引有重复项
>>> df.loc[[1], 'somedata']
1 13
1 24
Name: somedata, dtype: int64
>>> df.loc[[2], 'somedata']
2 54
Name: somedata, dtype: int64