gpt4 book ai didi

python - ix 选择与重复索引的不一致行为

转载 作者:行者123 更新时间:2023-11-28 22:47:34 24 4
gpt4 key购买 nike

考虑 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 选择返回哪种对象?目前我正在检查返回对象的长度。我想知道是否有更优雅的方式,或者是否可以强制选择,而不是只返回数字 54,以返回类似的形式

2    54
Name: somedata, dtype: int64

抱歉,如果这是一个愚蠢的问题,我无法在任何地方找到答案。

最佳答案

如果您传递一个索引列表而不是单个索引,您可以保证您将得到一个系列。换句话说,而不是

>>> 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 更好,因为它不那么神奇,尽管是什么导致了您的问题。)

关于python - ix 选择与重复索引的不一致行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26130538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com