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

lea*_*ner 7 python for-loop python-3.x pandas

我是 stackoverflow 的新手,我进行了研究,但没有找到令人满意的答案。

我知道我可以通过使用 df.iterrows() 遍历 df 来获得行索引。但是如果我想获得一个行位置而不是行 idx 呢?我可以使用什么方法?

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

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)
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到输出:

0
1
2
3
Run Code Online (Sandbox Code Playgroud)

谢谢!

jpp*_*jpp 6

如果您需要行号而不是索引,您应该:

  1. 使用enumerate一个循环内的计数器。
  2. 不要提取索引,请参阅下面的选项。

选项1

在大多数情况下,出于性能原因,您应该尝试使用df.itertuples而不是df.iterrows. 您可以指定index=False第一个元素不是索引。

for idx, row in enumerate(df.itertuples(index=False)):
    # do something
Run Code Online (Sandbox Code Playgroud)

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

选项 2

使用df.iterrows. 这更麻烦,因为您需要分离出未使用的变量。此外,这与itertuples.

for idx, (_, row) in enumerate(df.iterrows()):
    # do something
Run Code Online (Sandbox Code Playgroud)