Python 使用itertuples在数据帧上迭代

Python 使用itertuples在数据帧上迭代,python,pandas,Python,Pandas,我正在使用itertuples对pandas数据帧进行迭代。我还想在迭代时捕获行号: for row in df.itertuples(): print row['name'] 预期产出: 1 larry 2 barry 3 michael 1、2、3是行号。我想避免使用计数器和获取行号。使用pandas有没有一种简单的方法来实现这一点?当使用itertuples时,每行都会得到一个命名的元组。默认情况下,您可以使用row.index访问该行的索引值 如果索引值不是您要查找的值,则可

我正在使用itertuples对pandas数据帧进行迭代。我还想在迭代时捕获行号:

for row in df.itertuples():
    print row['name']
预期产出:

1 larry
2 barry
3 michael

1、2、3是行号。我想避免使用计数器和获取行号。使用pandas有没有一种简单的方法来实现这一点?

当使用
itertuples
时,每行都会得到一个命名的
元组。默认情况下,您可以使用
row.index
访问该行的索引值

如果索引值不是您要查找的值,则可以使用
enumerate

for i, row in enumerate(df.itertuples(), 1):
    print(i, row.name)

枚举
取代丑陋的计数器构造

对于无效的Python名称,请使用:

for row in df.itertuples():
    print(getattr(row, 'Index'), getattr(row, 'name'))
for i, row in enumerate(df.itertuples(index=False)):
    print(str(i) + row[df.columns.get_loc('My nasty - column / name')])

如果不指定
index=False
,将读取命名列之前的列。

拒绝使用
enumerate
(Python中用于这些情况的常见模式)似乎很奇怪。我会用它。否则,
df.reset_index()
将带来一个基于0的索引,因此行号将是您为给定行迭代的索引+1您应该使用
iterrows
如@Boud,它说他们在哪里拒绝使用enumerate?这是否回答了您的问题@iterrows的问题是数据类型可能无法跨行一致地维护。这可能是非常有问题的。为什么计数器丑陋?非常丑陋(int i=0;i)您的答案可能是正确的,但一个解释会帮助其他读者。有关更多信息,请阅读为什么getattr?只需使用
row.Index
row.name
任何反对票的原因?不麻烦,只是好奇。添加了enumerate,以防万一。