简单查询

时间:2016-09-01 16:32:06

标签: python pandas numpy

以下行导致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)

我在最后一行收到错误。

2 个答案:

答案 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)

如果您遇到此类错误,请先检查您的数据框是否包含您认为的错误。

我愚蠢地结束了一些系列对象被添加到应该包含整数的列之一!