2016-09-01 5 views
0

次の行はValueError(Pandas 17.1)を引き起こし、その理由を理解しようとしています。単純なクエリのPython Pandas ValueError

x = (matchdf['ANPR Matched_x'] == 1) 

ValueError:Seriesの真理値はあいまいです。 a.empty、a.bool()、a.item()、a.any()またはa.all()を使用します。

matchdf.loc[x, 'FullMatch'] = 1 

しかし、私は、以前の問題を乗り越えることができません。

私は、条件付きの割り当てを次のためにそれを使用しようとしています。

これまで何十回もこの種のことをやったことがありますが、データフレームの内容がどういうものなのかわかりませんが、おそらくそれはありますか?またはおそらく、私はおそらく私が見ることができないばかげたミスをしているでしょう!

ありがとうございました。

編集:私は、最後の行にエラーが発生します

inpairs = [] 
for m in inmatchedpairs: 
    # more code 
    p = {'Type In': mtype ,'Best In Time': besttime, 'Best G In Time': bestgtime, 
     'Reg In': reg, 'ANPR Matched': anprmatch, 'ANPR Match Key': anprmatchkey} 
    inpairs.append(p) 

outpairs = [] 
for m in outmatchedpairs: 
    # more code 
    p = {'Type Out': mtype ,'Best Out Time': besttime, 'Best G Out Time': bestgtime, 
     'Reg Out': reg, 'ANPR Matched': anprmatch, 'ANPR Match Key': anprmatchkey} 
    outpairs.append(p) 

indf = pd.DataFrame(inpairs) 
outdf = pd.DataFrame(outpairs) 
matchdf = pd.merge(indf, outdf, how='outer', on='ANPR Match Key') 
matchdf['FullMatch'] = 0 

x = (matchdf['ANPR Matched_x'] == 0) 

:より多くのコンテキストの場合は、ここではいくつかの上記のコードです。

+1

これはうまくいくはずですが、例を挙げることはできますか? – IanS

+0

例をさらに追加しましたが、他の場所でそれを複製することはできません。混乱している! –

答えて

1

あなたがこの種のエラーを持っている場合は、最初にあなたのデータフレームをチェックすると、あなたはそれがないと思うものを含んでいます。

intを含むはずの列の1つにいくつかのSeriesオブジェクトが追加されてしまったのです。

2

locを使用して値を設定します。

matchdf.loc[matchdf['APNR Matched_x'] == 1, 'FullMatch'] = 1 

df = pd.DataFrame({'APNR Matched_x': [0, 1, 1, 0], 'Full Match': [False] * 4}) 

>>> df 
    APNR Matched_x Full Match 
0    0  False 
1    1  False 
2    1  False 
3    0  False 

df.loc[df['APNR Matched_x'] == 1, 'FullMatch'] = 1 

>>> df 
    APNR Matched_x Full Match FullMatch 
0    0  False  NaN 
1    1  False   1 
2    1  False   1 
3    0  False  NaN 
+0

これは私のために同じエラーを生成します。 –

+0

ありがとうございます。私の問題は、マージ後の私のDataFrameや、何らかの種類のPandasバグに関係していると思います。 –