我正在尝试使用整数索引值从 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
df_selected = df[df['fruit'] == 'pear']
df_selected
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]
但我错了:
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()
会产生以下输出这意味着按索引选择时使用的正确范围是
df_selected.iloc[0:3+1]
我知道这是一个非常基本的问题,但我希望有人能指出正确的方向,以理解为什么这种行为是这样的,如果有特殊原因的话。
你应该使用
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