2017-04-25 75 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