从Pandas的iterrows()中获取行位置而不是行索引

11

我是新来的stackoverflow用户,进行了一些研究,但没有找到令人满意的答案。

我知道可以使用df.iterrows()迭代df来获取行索引。但如果我想要获取行位置而不是行索引,我应该使用什么方法呢?

下面是我正在处理的示例代码:

df = pd.DataFrame({'month': ['Jan', 'Feb', 'March', 'April'],
               'year': [2012, 2014, 2013, 2014],
               'sale':[55, 40, 84, 31]})

df = df.set_index('month')

for idx, value in df.iterrows():
    print(idx)

我该如何获得以下输出结果:

0
1
2
3

谢谢!


你可以通过 df.index 获取它。 - Pyd
我认为你应该问的问题是:“如何在不使用df.iterrows()的情况下回答我的问题”。 - Haleemur Ali
4个回答

11

如果你需要行数而不是索引,你应该:

  1. 在循环中使用 enumerate 作为计数器。
  2. 不要提取索引,参见下面的选项。

选项1

在大多数情况下,出于性能方面的考虑,你应该尝试使用 df.itertuples 而非 df.iterrows。你可以指定 index=False,这样第一个元素就不是索引。

for idx, row in enumerate(df.itertuples(index=False)):
    # do something

df.itertuples 会为每一行返回一个命名元组。

选项2

使用df.iterrows。这种方法更加繁琐,因为需要把一个未使用的变量分离出来。此外,与itertuples相比,这种方法效率较低。

for idx, (_, row) in enumerate(df.iterrows()):
    # do something

3

直接使用enumerate

for idx, (_, value) in enumerate(df.iterrows()):
    print(idx)

2

您可以在 df.index 上使用 get_loc

for idx, value in df.iterrows():
    print(idx, df.index.get_loc(idx))

输出:

Jan 0
Feb 1
March 2
April 3

0
你可以使用df.index(),它返回一系列索引数字。返回的值是一个RangeIndex对象,它是一个类似于range的可迭代对象,支持迭代和许多其他Pandas系列支持的功能:
>>> df.index
RangeIndex(start=0, stop=4, step=1)
>>> 
>>> list(df.index)
[0, 1, 2, 3]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接