我是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
谢谢!
答案 0 :(得分:3)
只需使用enumerate
:
for idx, (_, value) in enumerate(df.iterrows()):
print(idx)
答案 1 :(得分:2)
如果您需要行号而不是索引,则应该:
enumerate
作为计数器。选项1
在大多数情况下,出于性能原因,您应该尝试使用df.itertuples
代替df.iterrows
。您可以指定index=False
,以便第一个元素不是索引。
for idx, row in enumerate(df.itertuples(index=False)):
# do something
df.itertuples
为每一行返回一个namedtuple。
选项2
使用df.iterrows
。这更麻烦,因为您需要分离出一个未使用的变量。此外,这与itertuples
相比效率低。
for idx, (_, row) in enumerate(df.iterrows()):
# do something
答案 2 :(得分:1)
您可以在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
答案 3 :(得分:0)
您可以使用df.index()
返回一系列索引编号。返回的值是RangeIndex
对象,它是一个range
类似的可迭代,支持迭代和Pandas系列支持的许多其他功能:
>>> df.index
RangeIndex(start=0, stop=4, step=1)
>>>
>>> list(df.index)
[0, 1, 2, 3]