从 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遍历dataframe的行:迭代遍历dataframe的数据行iterrows函数itertuple函数