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

Posted

技术标签:

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

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

我知道我可以通过使用 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() 的情况下回答我的问题” 【参考方案1】:

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

    enumerate 用于循环内的计数器。 不要提取索引,请参阅下面的选项。

选项 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]

【讨论】:

以上是关于从 Pandas 中的 iterrows() 获取行位置而不是行索引的主要内容,如果未能解决你的问题,请参考以下文章

pandas iterrows()

pandas遍历dataframe的行:迭代遍历dataframe的数据行iterrows函数itertuple函数

pandas iterrows 将整数变为浮点数

具有先前值的 Python Pandas iterrows()

pandas怎样对数据进行遍历

pandas怎样对数据进行遍历