2016-07-15 61 views
0

我有浮點值數據集:阿呆錯誤 - 沒有看到它

dog-auto  dog-bird  dog-cat   dog-dog   Result 
41.9579761457 41.7538647304 36.4196077068 33.4773590373 0 
46.0021331807 41.33958925  38.8353268874 32.8458495684 0 
42.9462290692 38.6157590853 36.9763410854 35.0397073189 0 
41.6866060048 37.0892269954 34.575072914 33.9010327697 0 
39.2269664935 38.272288694 34.778824791 37.4849250909 0 
40.5845117698 39.1462089236 35.1171578292 34.945165344 0 
45.1067352961 40.523040106 40.6095830913 39.0957278345 0 
41.3221140974 38.1947918393 39.9036867306 37.7696131032 0 
41.8244654995 40.1567131661 38.0674700168 35.1089144603 0 
45.4976929401 45.5597962603 42.7258732951 43.2422832585 0 

這是一個SFrame。我試圖編寫一個函數,使用if/an語句來確定dog-dog的值是否小於dog-ct和dog-auto和dog-bird的值。

我已經經歷了這個4小時的更好的一部分。無可否認,我是Python的新手 - 我犯了一個錯誤,只是沒有看到它。

如果聲明:

def is_dog_correct(row): 
    if (dog_distances[dog_distances['dog-dog']] < dog_distances[dog_distances['dog-cat']]) & (dog_distances[dog_distances['dog-dog']] < dog_distances[dog_distances['dog-bird']]) & (dog_distances[dog_distances['dog-dog']] < dog_distances[dog_distances['dog-auto']]): 
     dog_distances['Result'] = 1 
    else: 
     dog_distances['Result'] = 0 

然後我調用函數:

dog_distances.apply(is_dog_correct) 

如果這是正常工作,我會看到「0」中的每一行,但第五記錄英寸我的if語句有什麼問題?

完全披露 - 這是課程,但花了4個小時後,我正在尋求幫助!

+4

'&'是按位操作。把你所有的'&'改成''和' – engineer14

+0

什麼是dog-distance,它既有字符串又有(顯然)浮點密鑰?你爲什麼使用'&'而不是'和'? – chepner

+2

你的函數需要一個「行」參數,但從來沒有使用它... –

回答

1

將&更改爲並且如前面的評論所示。另外,我建議你把這樣長的if語句分成多行,這樣它就更清晰易讀了。

def is_dog_correct(row): 
    if (dog_distances[dog_distances['dog-dog']] < dog_distances[dog_distances['dog-cat']]) and 
     (dog_distances[dog_distances['dog-dog']] < dog_distances[dog_distances['dog-bird']]) and 
     (dog_distances[dog_distances['dog-dog']] < dog_distances[dog_distances['dog-auto']]): 
     dog_distances['Result'] = 1 
    else: 
     dog_distances['Result'] = 0 
+0

Ok @Informat,我將它改爲上面顯示的確切代碼,但似乎還沒有通過條件。現在我想知道這是否在後臺執行布爾操作(True/False) - 我是否通過嘗試將值設置爲Result = 1或Result = 0來發生錯誤?謝謝你的想法!我感謝您的幫助! –

+0

我可以看到你如何定義和設置dog_distances嗎? – Informat

0

通過查找所有值的min(最小值),使您的第一條語句更加乾淨。這可以確保「狗狗」小於所有的休息:

def is_dog_correct(row): 
    if dog_distances[dog_distances['dog-dog']] < min([dog_distances[dog_distances['dog-'+x]] for x in ['cat','bird','auto']]): 
     dog_distances['Result'] = 0 
    else: 
     dog_distances['Result'] = 1 

編輯:對於debuggin目的使用以下命令:

def is_dog_correct(row): 
    print 'dog is {}'.format(dog_distances[dog_distances['dog-dog']]) 
    print 'everyone else is {}'.format([dog_distances[dog_distances['dog-'+x]] for x in ['cat','bird','auto']]) 
    if dog_distances[dog_distances['dog-dog']] < min([dog_distances[dog_distances['dog-'+x]] for x in ['cat','bird','auto']]): 
     print 'Yay dog is faster' 
     dog_distances['Result'] = 0 
    else: 
     print 'Awww, dog is not faster' 
     dog_distances['Result'] = 1 
+0

這很有趣,但我需要確定狗狗值是否小於每個值。也許你的代碼將確定哪個值是所有三個中的最小值,然後運行條件?如果那是真的,那麼也許會工作 - 我會嘗試並讓你知道。感謝您的考慮! –

+0

我彈出它,但結果是看到所有值設置爲1(而不是0),但上面顯示的HEAD部分中應該爲0的一行仍然顯示爲1.所以...如果條件仍然不是認識到狗狗的價值低於第6排的狗狗價值(如上所示)感謝您的考慮! –

+0

不客氣。除了最後一行,它們應該是全部的,因爲43.2不小於42.7。 –

相關問題