以下行导致ValueError(Pandas 17.1),我试图了解原因。
x = (matchdf['ANPR Matched_x'] == 1)
ValueError:系列的真值是不明确的。使用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)
我在最后一行收到错误。
答案 0 :(得分: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
答案 1 :(得分:1)
如果您遇到此类错误,请先检查您的数据框是否包含您认为的错误。
我愚蠢地结束了一些系列对象被添加到应该包含整数的列之一!