2016-07-24 16 views
0

immer noch ziemlich neu zu diesem alle so jede Hilfe, Beratung, etc ist wirklich geschätzt.Running True/False Aussagen über Koordinaten in zwei separaten Dokumenten gespeichert

Heres mein Code:

import math 
import pandas 
file1 = pandas.read_excel('Book1.xlsx') 
file2 = pandas.read_excel('Book2.xlsx') 
file1['RA_diff'] = file2['RA'] - file1['RA'] 
file1['DEC_diff'] = file2['DEC'] - file1['DEC'] 
dist = file1.apply(lambda row: math.hypot(row['RA_diff'], row['DEC_diff']), axis=1) 
if dist.values >= 5: 
    print False 
elif dist.values <= 5: 
    print True, dist 

Jedoch, wenn ich diesen Code ausführen, erhalte ich:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all() 

Ich glaube, ich verstehe, dass ich es gelesen habe zwei getrennte Werte, weil ohne die T zu machen versuche,/F-Befehl nur (Druck dist) erhalte ich:

0 4.472136 

Also, ich weiß nicht, wie ich es zu nennen, aber mein Verdacht ist, dass ich bin versuchen, es den Nullwert und/oder mehrere Werte zu lesen.

Kann mir bitte jemand erklären, was genau ich hier falsch mache und wie ich es eventuell beheben kann? Vielen Dank im Voraus!

Durch die Art, wie die Punkte in den Unterlagen gekennzeichnet sind und erscheinen als solche im Excel-Blatt:

Buch 1:

x y 
8 -5 

Buch 2:

x y 
12 -3 
+0

Wenn Sie "dist" drucken, wissen Sie, worauf sich '0' und' 4.472136' beziehen? –

+0

Ich weiß, dass die 4.472136 Nummer, wenn es sich um den linearen Abstand der beiden Punkte oder genauer gesagt in diesem Fall die Hypotenuse zwischen ihnen. Aber bezüglich der 0 habe ich keine Ahnung. –

+0

'0' ist der Index dieses Wertes' 4.472146'.Das ist eine Serie oder ein Datenrahmen: Indizes, die mit Werten verknüpft sind (ein Wert im Falle einer Reihe, zwei oder mehr im Falle eines Datenrahmens). Nun, haben Sie erwartet, dass Ihre Serie dist genau einen Index und Wert hat? –

Antwort

2

Das Problem ist, in dieser Zeile:

if dist.values >= 5: 
    print False 

dist.values ist eine Pandas-Serie. Sie haben dies sogar bewiesen, als Sie gedruckt haben und 0 4.472136 bekommen haben. Wenn Sie eine Reihe mit einer Zahl vergleichen, erhalten Sie eine weitere Reihe, bei der jedes Mitglied der Reihe ein boolescher Wert ist. Das Problem liegt in der Tatsache, dass Sie versuchen, die Wahrheit der Serie selbst zu bewerten.

Zur Erinnerung, die Serie dist.values >= 5 ist eine Reihe von Wahrheitswerten. if dist.values >= 5 versucht zu bestimmen, ob dist.values >= 5 wahr ist oder nicht. Und das ergibt keinen Sinn.

Wenn Sie die Wahrheit des in der Serie eines Einzelteils wünschen:

if dist.value[0] >= 5: 

Oder:

if (dist.value >= 5)[0]: 

Wenn Sie wissen wollen, ob eines der Elemente, auch wenn nur eine vorhanden ist , gilt:

if (dist.values >= 5).any() 

oder alle Werte zutreffen:

Mit dem Einzelwert in der Reihe, diese werden alle bewerten die gleiche Sache zu sein.

+0

Vielen Dank für die eingehende Lektion, genau das habe ich mir erhofft! Fühle mich wie ich viel daraus gelernt habe. –

+0

Nur wirklich schnell, wenn ich den Code auf: if (dist.values) [0]> = 5: Ich habe immer noch die gleiche Ausgabe: True 0 0.485278 –