2016-08-21 37 views
0

背景:我有一個SFrame,其中包含數字,指示狗圖像與其他圖像的接近程度。通常情況下,狗的形象應該是最接近另一個狗形象,但關鍵是要測試的評價方法在SFrame問題上使用apply()方法

我SFrame被稱爲dog_distances(1000行×4列):

dog-automobile dog-bird    dog-cat dog-dog 
41.9579761457 41.7538647304 36.4196077068 33.4773590373 
46.0021331807 41.3382958925 38.8353268874 32.8458495684 
42.9462290692 38.6157590853 36.9763410854 35.0397073189 
41.6866060048 37.0892269954 34.5750072914 33.9010327697 
39.2269664935 38.272288694 34.778824791 37.4849250909 
40.5845117698 39.1462089236 35.1171578292 34.945165344 

我想編寫一個函數該檢查,如果狗狗是最低的號碼和該功能應用到整個SFrame

訪問一個SFrame正常輸出一個字典... sframe_name [行#] [「COLUMN_NAME」]的行

添加.value s()到該行的結尾只是輸出列表中的值。 這使您可以應用像min()或max()這樣的數學方法,這對創建函數is_dog_correct非常有用。

因此我的功能是:

def is_dog_correct(row): 
    #checking if dog-dog is smallest value 
    if dog_distances[row]['dog-dog'] == min(dog_distances[row].values()): 
     return 1 
    else: 
     return 0 

我的函數以行作爲輸入,並且如果狗狗該行的值等於該行中的最小值返回1。如果不是這樣,它將返回0。

正在運行is_dog_correct(0)個輸出1.我們期望這個,因爲正如您在上面看到的,第零行dog-dog中的值是該行中的最小數。

運行is_dog_correct(4)輸出0.我們期望這樣做,因爲第零行dog-dog中的值不是該行中的最小數字。

所以函數is_dog_correct在一行一行地完美工作!

當我運行對整個sFrame的建議:dog_distances.apply(is_dog_correct)

我得到一個屬性錯誤:

'SFrame' object has no attribute 'values' 

請人解釋爲什麼函數工作逐行但不是在整個SFrame?

回答

0

我想出瞭解決方案:

我認爲這個問題是所有文檔建議由一行。適用()去行。 我認爲這意味着,當它在給定行上運行函數時,傳遞的變量是整數的行號。

事實上,傳遞變量/對象/文本。適用()是sframe_name[row_#]

所以在你的功能,如果你想訪問一個給定的索引/ ACT

sframe_name[row_#]['column_name'] 

一一般的形式是這樣的:

passed_variable['column_name'] 

只要是完全透明的,在我的功能確切的代碼是:

if dog-dog[row]['dog-bird'] <= dog-dog[row]['dog-dog']: 

當代碼應該是:

if row['dog-bird'] <= row['dog-dog']: 
0

請試試這個:

dog_distances['new_column'] = dog_distances.apply(lambda row: 1 if row['dog-dog'] == min(row.values()) else 0) 

添加

嗨史蒂芬,

此代碼工作正常在我的筆記本電腦。請參閱下面的鏈接。

  1. Your data(可能是你實際的數據比這更長的時間)

  2. 應用拉姆達

    dog_distances [ 'NEW_COLUMN'] = dog_distances.apply(拉姆達行:1,如果行[」 dog-dog'] == min(row。值()),否則爲0)

  3. Result

+0

我想你的建議,但被賦予了KeyError異常:「dog_dog」 –

+0

改變列名「dog_dog」到「狗犬」。請再試一次。 – pocari

+0

我試過了,這次我執行並創建了一個名爲new_column的新列,但它填充了零。 我總結了專欄只是爲了看看是否有某個地方。總和爲零。 –

相關問題