2017-04-25 74 views
9

我想遍历Python Pandas数据框的行。在数据框的每一行中,我试图通过列名引用行中的每个值。Python Pandas遍历行并访问列名

以下是我有:

import numpy as np 
import pandas as pd 

df = pd.DataFrame(np.random.rand(10,4),columns=list('ABCD')) 
print df 
      A   B   C   D 
0 0.351741 0.186022 0.238705 0.081457 
1 0.950817 0.665594 0.671151 0.730102 
2 0.727996 0.442725 0.658816 0.003515 
3 0.155604 0.567044 0.943466 0.666576 
4 0.056922 0.751562 0.135624 0.597252 
5 0.577770 0.995546 0.984923 0.123392 
6 0.121061 0.490894 0.134702 0.358296 
7 0.895856 0.617628 0.722529 0.794110 
8 0.611006 0.328815 0.395859 0.507364 
9 0.616169 0.527488 0.186614 0.278792 

我以前this approach迭代,但它只给我的解决方案的一部分 - 在每次迭代中选择行后,我如何通过访问行元素他们的列名?

这里是我想要做的事:

for row in df.iterrows(): 
    print row.loc[0,'A'] 
    print row.A 
    print row.index() 

我的理解是,该行是熊猫series。但我无法索引该系列。

是否可以在同时遍历行时使用列名?

+1

在你的例子中'row'不是一个Series,它应该是一个元组。但是,如果你为'idx,在df.iterrows()'中行,'行''A']'应该可以正常工作吗? – ayhan

+0

这就是我错过的!谢谢。 –

回答

12

iterrows()该项目是不是一个系列,而是(指数系列)元组,这样你就可以在把它解析为循环,像这样:

for (idx, row) in df.iterrows(): 
    print(row.loc['A']) 
    print(row.A) 
    print(row.index) 

#0.890618586836 
#0.890618586836 
#Index(['A', 'B', 'C', 'D'], dtype='object') 
+0

@StevenG是的。这就是我想说的。我想如果我们说(索引,系列)就更清楚了。 – Psidom

+0

按照第二个答案中的建议使用itertuples()...如果您正在处理大型数据帧,则intertuples速度会快很多 – Megha

7

我也很喜欢itertuples()

for row in df.itertuples(): 
    print(row.A) 
    print(row.Index) 

由于行是一个名为元组,如果你打算访问值在每行,这应该是MUCH更快

速度运行:

df = pd.DataFrame([x for x in range(1000*1000)], columns=['A']) 
st=time.time() 
for index, row in df.iterrows(): 
    row.A 
print(time.time()-st) 
45.05799984931946 

st=time.time() 
for row in df.itertuples(): 
    row.A 
print(time.time() - st) 
0.48400020599365234 
+0

谢谢!我认为这实际上是我想到的(但不记得)。它更实用(因为不需要'idx',就像不得不列举一个列表一样)。因为我要求'iterrows()',所以我会回答这个问题。但这是我记忆中曾经用过的东西。 –

+0

其像100x那样更快.. –

+0

@StevenG,感谢您的性能比较。 – vlmercado