如何使用索引从 Pandas DataFrame 中选择行?

问题描述 投票:0回答:1

我正在尝试使用整数索引值从 Pandas DataFrame 中选择行。

这不起作用,我得到了索引错误。

  • 这对我来说意味着按索引执行行选择会隐式导致
    reset_index()
    被调用,尽管我可能是错的
  • 以下示例解释了为什么我观察到的行为表明情况如此
import pandas

data = {
    'number': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'fruit': 3 * ['apple'] + 3 * ['pear'] + 2 * ['banana'] + ['pear'] + ['apple'],
    'color': 3 * ['red', 'green', 'blue'] + ['red'],
    'letter': 5 * ['A', 'B'],
}
df = pandas.DataFrame(data)
df

Pandas DataFrame

df_selected = df[df['fruit'] == 'pear']
df_selected

Pandas DataFrame

df_selected.index
Index([3, 4, 5, 8], dtype='int64')

这肯定表明我有一个 DataFrame,其索引包含值 3、4、5 和 8。

我现在想要选择 DataFrame 中从第一次出现“pear”到最后一次出现的所有行,通过使用整数索引

我认为这应该可以通过以下语法实现:

FIRST = 3
LAST = 8
df_selected[FIRST:LAST+1]

但我错了:

Pandas DataFrame

  • 打印时(将 DataFrame 显示到
    stdout
    或 Jupyter Notebook Cell),索引显示值
    3, 4, 5, 8
  • 使用语法
    df_selected[A:B]
    df_selected.iloc[A:B]
    按索引进行选择时,整数参数
    A
    B
    被解释为好像已调用
    df_selected.reset_index()
  • 我这么说是因为调用
    reset_index()
    会产生以下输出

Pandas DataFrame

这意味着按索引选择时使用的正确范围是

df_selected.iloc[0:3+1]

我知道这是一个非常基本的问题,但我希望有人能指出正确的方向,以理解为什么这种行为是这样的,如果有特殊原因的话。

pandas
1个回答
0
投票

你应该使用

loc
:

FIRST = 3
LAST = 8

df_selected = df[df['fruit'] == 'pear']
df_selected.loc[FIRST:LAST+1]

输出:

   number fruit  color letter
3       4  pear    red      B
4       5  pear  green      A
5       6  pear   blue      B
8       9  pear   blue      A

使用

df_selected[1:2]
时,其行为类似于
iloc

© www.soinside.com 2019 - 2024. All rights reserved.