Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有重复索引的ix选择的不一致行为_Python_Pandas - Fatal编程技术网

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