到目前爲止,這裏有一些問題與你寫的東西,這是你的R編程背景可以理解的:
for i in range(1, 3):
在python 3.x中,這樣做的是創建一個range object,您可以將其視爲一種特殊類型的函數(though is really an object that contains iteration properties),它允許您生成具有特定步長的數字序列(缺省值爲1)獨家。此外,您需要知道大多數編程語言索引從零開始,而不是1,並且這包括python。
這個範圍對象在這裏所做的是生成序列1, 2
就是這樣。
您正在使用i索引的數組不會索引所有索引。我相信你要的是這樣的:
for i in range(3):
注意如何只有一個號碼在這裏,這個默認範圍內的獨家最大值,0是包容性最低,因此這將產生0,1,2
序列。如果你有一個大小爲3的數組,這將代表該數組的所有可能的索引。
這下一行是有點混亂給我,因爲我不熟悉的R,但我有點明白你想幹什麼。如果我理解正確,你試圖比較兩列中的三個問題,並將第一列中的每個問題與第二列中的問題進行比較,從而產生一個3 x 3的比較結果矩陣,您試圖將結果存儲在結果中?假設大小已經是正確的(因爲結果是3x3),我想解釋一下我在這段代碼中看到的一些特性。
results.iloc[i-1,i] = liteClient.compare(questions.iloc[0,i], questions.iloc[:,1])
與results.iloc [I-1,I]你要由行編制索引的列,如I-1是行,以及i是列在這裏。因此,如果不更改range(1,3)
,則會導致訪問以下索引:0,1,1,就是這樣。我相信liteClient.compare(...)應該返回一個1x3的數據框,或者基於你想要在裏面做什麼的大小爲3的列表,但這可能不是這種情況,但我不是確定你用什麼對象來調用該成員函數,所以我不知道該函數的文檔在哪裏存在。假設它不會返回尺寸3的list
或數據幀,則需要更改您要分配數據的方式,通過這個什麼:
results.iloc[i,:] = ...
這裏發生的事情是,iloc(...)
走的是一條行位置參數和切片位置參數,這裏您將該行結果矩陣中的所有列分配給compare返回的值。隨着for
語句的更改,它將迭代數據幀中的所有索引。
liteClient.compare(questions.iloc[0,i], questions.iloc[:,1])
這條線,因爲它目前代表你會遍歷每列questions.iloc的第一排,然後比較它們的第二列,第二questions.iloc的所有行。
我相信你會想要做的是將其更改爲:
liteClient.compare(questions.iloc[i,0], questions.iloc[:,1])
這樣做是對每個i,0,1,2,在列0,列1比較這對每一行如果你的問題數據框是實際上組織成2列和3行這應該工作,否則你將需要改變你如何創建問題。
所有
我相信固定程序應該是這個樣子:
for i in range(3):
results.iloc[i,:] = liteClient.compare(questions.iloc[i,0], questions.iloc[:,1])
什麼Python版本您使用的? – snb
@snb我通過Jupyter Notebook使用Anaconda 3.5.0。 – rtaylor
好吧,我可能會幫助你,讓我快速寫出一個答案 – snb