【问题标题】:A pandas series with a floating index has no implicit index?带有浮动索引的熊猫系列没有隐式索引?
【发布时间】:2019-04-27 06:37:47
【问题描述】:

我创建了一个带有浮点类型索引的熊猫系列:

In [558]:  fls=pd.Series({.1:'a',.2:'b',.3:'c',.4:'d'})

然后我想:让我们使用隐式索引:

In [559]: fls[1:3]
Out[559]: Series([], dtype: object)

为什么结果是一个空系列?

【问题讨论】:

  • 你当前的索引是Float64Index([0.1, 0.2, 0.3, 0.4], dtype='float64')
  • 它是一个 FloatIndex,所以为了避免像 fls[0.1:0.3] 这样的索引产生歧义,它不做位置索引。您需要明确使用 iloc。
  • 这是浮动索引的典型情况吗?因为如果索引是字符串或整数类型,则隐式索引有效。 ser=pd.Series({11:'a',12:'b',13:'c',14:'d'}) 也是如此,ser[1:3] 给出了 12 和 13 个条目。同样当 ser=pd.Series({'a':11,'b':12,'c':13,'d':14}) 时, ser[1:3] 给出 'b' 和 'c ' 条目。
  • 如果索引是字符串,则没有歧义。您可以使用ser['a':'c']ser[1:3] 很明显,在第一个中您按标签索引,而在第二个中按位置索引。如果索引是整数,它只执行位置索引(例如,您必须执行 ser.loc[11:13])。如果是浮点索引,为了方便访问范围(如fls[0:1]),它不会进行位置索引。

标签: python pandas indexing series


【解决方案1】:

使用iloc 进行整数位置索引

print(fls.iloc[1:3])

# 0.2    b
# 0.3    c
# dtype: object

位置索引从0 开始。与基于标签的索引不同,但与list slicing 一致,排除了最后一个位置。

使用loc 进行基于标签的索引

print(fls.loc[0.1:0.3])

# 0.1    a
# 0.2    b
# 0.3    c
# dtype: object

只有一个索引

没有“隐式索引”或“显式索引”之类的东西。只有一个索引:

print(fls.index)

# Float64Index([0.1, 0.2, 0.3, 0.4], dtype='float64')

Pandas 提供了按位置(iloc按标签(loc)查询此索引的方法。

【讨论】:

  • 看下面怎么可能只有一个索引:if ser=pd.Series({11:'a',12:'b',13:'c' ,14:'d'}),然后 ser[11:13] 给出 11,12 和 13 个条目,但 ser[1:3] 也可以工作,尽管它只给出 12 和 13 个条目。同样当 ser=pd.Series({'a':11,'b':12,'c':13,'d':14}) 时, ser['a':'c'] 给出 'a ','b' 和 'c' 条目,但 ser[1:3] 也有效,尽管它只给出了 'b' 和 'c' 条目。那么其他索引也是索引吗?
  • @ericj,一个索引可以有多个值(也称为标签)。从字面上看,您可以使用fls.index.values 从索引中获取值。
猜你喜欢
  • 2023-04-08
  • 2016-02-06
  • 2020-09-17
  • 2017-02-17
  • 2018-09-17
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
相关资源
最近更新 更多