2016-07-24 5 views
0

これはまだかなり新しいので、ヘルプやアドバイスなどは本当に感謝しています。相続人2つの別々のドキュメントに格納されている座標にTrue/Falseステートメントを実行する

私のコード:私はこのコードを実行すると

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 

しかし私が手:

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

は、私は私が理由Tずに、2つの別々の値を読み取る作るしようとしていることを理解して考えます

0 4.472136 

だから、私はそれを呼び出すために何を知らないが、私の疑いは私がいることである:/ Fコマンドだけ(印刷DIST)私が手ゼロ値および/または複数の値を読み取らせようとする。

誰でも正確に私がここで間違っていて、それを修正する方法を説明していただけますか?事前に多くの感謝!文書内のポイントが標識されているところで

とExcelシートでそのように表示されます。

ブック1:

x y 
8 -5 

帳2:

x y 
12 -3 
+0

'print dist'を実行すると、' 0'と '4.472136'が参照するものは分かりますか? –

+0

私は知っている4.472136番号は、2点以上の線形距離以上の場合、特にこの場合は、それらの間の斜辺を参照してください。しかし、0については、わかりません。 –

+0

「0」はこの値「4.472146」のインデックスです。これは、一連のデータフレームとは、値に関連付けられたインデックス(系列の場合は1つの値、データフレームの場合は2つ以上の値)です。さて、あなたのシリーズのdistが正確に1つのインデックスと値を持つことを期待していましたか? –

答えて

2

問題がありますこの行の中:

if dist.values >= 5: 
    print False 

dist.valuesはパンダシリーズです。あなたが印刷して0 4.472136を得たときにあなたはこれを証明しました。シリーズを数値と比較すると、シリーズの各メンバーがブール値である別のシリーズが取得されます。問題は、シリーズ自体の真実性を評価しようとしているという事実にあります。

したがって、シリーズdist.values >= 5は一連の真理値です。 if dist.values >= 5は、dist.values >= 5が真であるかどうかを判断しようとしています。それは意味をなさない。

あなたは、シリーズ内の1つの項目の真実にしたい場合は:あなたがアイテムのいずれかのかどうかを知りたい場合は一つだけがあっても、

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

if dist.value[0] >= 5: 

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

またはすべての値が真である::、真である

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

シリーズの単一の値で、これらはすべて同じものと評価されます。

+0

深いレッスンのためのおかげで、これはまさに私が得ることを望んでいたものです!私はそれから多くを学んだように感じる。 –

+0

もし私がコードを修正したときには本当に素早くなりました。 if(dist.values)[0]> = 5: 私はまだ同じ出力を持っています: True 0 0.485278 –

関連する問題