2014-07-08 56 views
0

我目前正在嘗試爲我的數據框的每一行運行單因子方差分析(有519行,每行表示不同的生物分類羣,每列表示不同的樣本);但是我不斷得到一個無效的語法錯誤,我相信我的錯誤在於我選擇的行。我是相當新的Python和大熊貓,所以這裏是我到目前爲止,有Subj1是我的數據框的名稱:單行數據框的單行Anova

for x in range(0,24): 
    print(scipy.stats.f_oneway(Subj1.iloc[[x,:],:])) 

我怎麼會去通過行迭代,讓我返回ANOVA值每一行?

在此先感謝!

編輯:我試圖將數據幀值轉換然後運行迭代像這樣無濟於事:(:

Subject1Values=Subj1.values 
for x in range(0,24): 
    print(scipy.stats.f_oneway(Subj1Values[x])) 

編輯2:我嘗試這樣做,但它仍然是返回(楠,NAN)多次:

Subj1Values=Subj1.values 
for i in range(0,24): 
    print(stats.f_oneway(Subj1Values[[i],[0]],Subj1Values[[i],[1]],Subj1Values[[i],[2]],Subj1Values[[i],[3]],Subj1Values[[i],[4]],Subj1Values[[i],[5]])) 
+0

是'Subj1.iloc [[x,:],:]'raise the SyntaxError?如果是這樣,請解釋這個表達意圖是做什麼的。 – unutbu

+0

我試圖選擇行x中的所有列。我相信這是導致一個錯誤(我是從數據框中選擇數據的新手)。 – Broncos423

+0

上面的編輯循環讓我相信迭代正在工作,但它只返回25行(nan,nan) – Broncos423

回答

1

itertools.product可以生成物品的兩個序列的笛卡爾積例如,

In [4]: import itertools as IT 

In [5]: list(IT.product([1,2,3], [4,5,6])) 
Out[5]: [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)] 

因此,生成所有對行和列的,你可以使用

import itertools as IT 
import scipy.stats as stats 

arr = Subj1.values 
rows = range(arr.shape[0]) 
columns = range(arr.shape[1]) 
for i,j in IT.product(rows, columns): 
    print(stats.f_oneway(arr[i,:], arr[:,j])) 

需要注意的是它好像你的數據更像是一個數組比數據幀。 DataFrames在列的行和列名稱上有一個索引。你在這裏沒有使用這些,這表明也許你不需要使用DataFrame。而且,行和列中的值被視爲定性相同的東西。這通常不適用於DataFrame中的數據。所以你可能會更好地使Subj1成爲NumPy數組而不是Pandas DataFrame。