【问题标题】:When I use [[]] as my index number, why does it return this?当我使用 [[]] 作为我的索引号时,为什么它会返回这个?
【发布时间】:2021-08-24 23:59:12
【问题描述】:

我是 python 的初学者,所以这可能是一个非常愚蠢的问题:

所以我在研究人们如何直接访问数组。

我创建了一个数组array = np.array([2,3,4])

当我试图访问它时,而不是说 print(array[1])

我说print(array[[1]]) 和 它输出了[3],而不是仅仅说3

这是为什么呢?我认为这可能与人们在数据框中使用[[]] 访问类别的方式有关,但我不太确定这里的联系。

如果可能的话,有人可以简单地解释一下当人们使用[[]]时计算机实际上在做什么。

我尝试查看 pandas 文档,但我真的不明白,因为我只是 python 的初学者。

【问题讨论】:

  • 这是一个麻木的事情。 [[..]] 语法允许您从数组中获取多个元素。这就是为什么你要返回一个列表
  • 相关文档可见here
  • 即使没有 numpy,[3] 也是一个包含 3 的列表,[[3]] 是一个包含一个包含 3 的列表。两者在它们的上下文中都很有用。
  • 这叫做“索引”。
  • @TimRoberts 呃,不,在索引的上下文中,array[3] 等价于array.__getitem__(3),而array[[3]] 等价于array.__getitem__([3])

标签: python dataframe numpy indexing


【解决方案1】:

您所做的是从数组中提取元素数组,而不仅仅是单个元素。碰巧你得到一个长度为 1 的数组。

为了更好地理解,试试这个:

import numpy as np
a = np.array([2,3,4])
print(a[1])
print(a[2])
print(a[[1]])
print(a[[1,2,0,2,1]])

你应该得到

3
4
array([3])
array([3,4,2,4,3])

希望您能看到您尝试的 [[1]] 案例只是我添加的最后一个示例的一个特例。

如果还不清楚,也许你可以试试这个:

a = np.array([2,3,4])
indices = [1,2,0,2,1]
print(a[indices])

这是同一件事,但对您来说可能看起来更明智。这是在索引处请求值和在索引集合处请求值之间的区别。使用 numpy 两者都可以。

另请注意,此功能特定于 numpy(和 pandas),不适用于常规 Python 列表:

a = [2,3,4]
print(a[1])  # => 3
print(a[[1]])  # => TypeError

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-04
    • 2017-05-22
    • 2020-11-04
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多