如何在Pandas中对DataFrame的行进行迭代?

我有一个来自pandas的DataFrame

import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
print df

输出。

   c1   c2
0  10  100
1  11  110
2  12  120

现在我想在这个框架的行上进行迭代。对于每一行,我希望能够通过列的名称来访问其元素(单元格中的值)。比如说。

for row in df.rows:
   print row['c1'], row['c2']

在pandas中可以这样做吗?

我找到了这个类似问题。但它并没有给出我需要的答案。例如,那里建议使用。

for date, row in df.T.iteritems():

for row in df.iterrows():

但我不明白什么是 "row "对象,以及我怎样才能使用它。

解决办法

DataFrame.iterrows是一个生成器,可以同时产生索引和行。

import pandas as pd
import numpy as np

df = pd.DataFrame([{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}])
for index, row in df.iterrows():
    print(row['c1'], row['c2'])

Output: 
   10 100
   11 110
   12 120
评论(7)

你应该使用df.iterrows()。尽管逐行迭代并不是特别有效,因为必须创建Series对象。

评论(3)

你也可以使用df.apply()来迭代行和访问一个函数的多列。

文档:DataFrame.apply()

def valuation_formula(x, y):
    return x * y * 0.5

df['price'] = df.apply(lambda row: valuation_formula(row['x'], row['y']), axis=1)
评论(6)