考虑一下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.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'
我不明白这个(貌似?)不一致的行为。这是故意的吗?我希望从同一个操作返回的对象具有相同的结构。此外,我需要围绕这个问题构建我的代码,所以我的问题是,如何检测ix选择返回的对象类型?目前我正在检查返回的对象的len。我想知道是否有更优雅的方式,或者是否可以强制选择,而不是仅返回数字54,以返回类似的形式
2 54
Name: somedata, dtype: int64
很抱歉,如果这是一个愚蠢的问题,我无法在任何地方找到答案。
答案 0 :(得分:4)
如果您传递索引列表而不是单个索引,则可以保证您将返回系列。换句话说,而不是
>>> 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
通常更好一点,因为它不那么神奇,尽管不是{&# 39;在这里引起你的问题的原因。)