按整数索引选择一行熊猫系列/数据框

新手上路,请多包涵

我很好奇为什么 df[2] 不受支持,而 df.ix[2]df[2:3] 都有效。

 In [26]: df.ix[2]
Out[26]:
A    1.027680
B    1.514210
C   -1.466963
D   -0.162339
Name: 2000-01-03 00:00:00

In [27]: df[2:3]
Out[27]:
                  A        B         C         D
2000-01-03  1.02768  1.51421 -1.466963 -0.162339

我希望 df[2]df[2:3] 的工作方式相同,以符合 Python 索引约定。是否存在不支持按单个整数索引行的设计原因?

原文由 user1642513 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 241
2 个回答

回应@HYRY,请参阅 0.11 中的新文档

http://pandas.pydata.org/pandas-docs/stable/indexing.html

这里我们有新的运算符, .iloc 明确只支持整数索引, .loc 明确只支持标签索引

例如想象这个场景

In [1]: df = pd.DataFrame(np.random.rand(5,2),index=range(0,10,2),columns=list('AB'))

In [2]: df
Out[2]:
          A         B
0  1.068932 -0.794307
2 -0.470056  1.192211
4 -0.284561  0.756029
6  1.037563 -0.267820
8 -0.538478 -0.800654

In [5]: df.iloc[[2]]
Out[5]:
          A         B
4 -0.284561  0.756029

In [6]: df.loc[[2]]
Out[6]:
          A         B
2 -0.470056  1.192211

[] 行进行切片(按标签位置)

原文由 Jeff 发布,翻译遵循 CC BY-SA 4.0 许可协议

DataFrame 索引运算符 [] 的主要目的是选择列。

当向索引运算符传递字符串或整数时,它会尝试查找具有该特定名称的列并将其作为系列返回。

因此,在上面的问题中: df[2] 搜索与整数值 2 匹配的列名。此列不存在,并且引发了 KeyError


当使用切片表示法时,DataFrame 索引运算符完全改变了选择行的行为

奇怪的是,当给定一个切片时,DataFrame 索引运算符会选择行,并且可以通过整数位置或索引标签来选择行。

 df[2:3]

这将从具有整数位置 2 到 3 的行开始切片,不包括最后一个元素。所以,只有一行。以下每三行选择从整数位置 6 开始但不包括 20 的行。

 df[6:20:3]

如果您的 DataFrame 索引中包含字符串,您还可以使用由字符串标签组成的切片。有关详细信息,请参阅 .iloc 与 .loc 上的此解决方案

我几乎从不将这种切片符号与索引运算符一起使用,因为它不明确且几乎从未使用过。按行切片时,坚持使用 .loc/.iloc

原文由 Ted Petrou 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题