【问题标题】:Get Row Position instead of Row Index from iterrows() in Pandas从 Pandas 中的 iterrows() 获取行位置而不是行索引
【发布时间】:2018-11-02 06:06:35
【问题描述】:

我是 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)

如何获得以下输出:

0
1
2
3

谢谢!

【问题讨论】:

  • 您可以通过df.index获取它
  • 我认为您应该问的问题是“我如何在不使用df.iterrows() 的情况下回答我的问题”

标签: python python-3.x pandas for-loop


【解决方案1】:

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

  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

【讨论】:

    【解决方案2】:

    只需使用enumerate:

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

    【讨论】:

      【解决方案3】:

      您可以在 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
      

      【讨论】:

        【解决方案4】:

        您可以使用df.index() 返回一系列索引编号。返回值是一个RangeIndex 对象,它是一个类似range 的可迭代对象,支持迭代和 Pandas 系列支持的许多其他功能:

        >>> df.index
        RangeIndex(start=0, stop=4, step=1)
        >>> 
        >>> list(df.index)
        [0, 1, 2, 3]
        

        【讨论】:

          猜你喜欢
          • 2022-10-01
          • 2014-06-02
          • 2021-01-17
          • 1970-01-01
          • 2022-11-29
          • 2021-05-09
          • 1970-01-01
          • 2017-10-12
          • 1970-01-01
          相关资源
          最近更新 更多