ValueError:Series的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()?

时间:2018-01-30 14:56:07

标签: python pandas valueerror

我和大熊猫一起做菜,最近,我得到了#ValueError'当我试图修改遵循某些规则的列时,如:

var titles = new HashSet<string>();

foreach (var title in SeleniumContext
    .Driver
    .FindElements(By.XPath(ComparisonTableElements.ProductTitle))
    .Select(p => p.Text))
{
    if (!titles.Add(title))
    {
        Assert.Fail("Found duplicate product in the table");
    }
}

我正在搜索此错误,我想这是因为&#39; if&#39;声明和&#39; ==&#39;运营商,但我不知道如何解决这个问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

所以Andrew L的评论是正确的,但为了您的利益,我会稍微扩展一下。

当你打电话时,例如

csv_input['ip.dst'] == '192.168.1.100'

返回的是一个Series,其索引与csv_input相同,但该系列中的所有值都是布尔值,并表示该行csv_input['ip.dst']中的值是否等于'192.168.1.100'

所以,当你打电话

 if csv_input['ip.dst'] == '192.168.1.100':

您是否要求系列评估为True还是False。希望这解释了The truth value of a Series is ambiguous.的含义,它是一个系列,它不能归结为布尔值。

现在,看起来像你想要做的是设置flow_dirip.src&amp; ip.dst列,基于ip.src列中的值。

执行此操作的正确方法是.loc[],如下所示:

#equivalent to first if statement
csv_input.loc[
    csv_input['ip.src'] = '192.168.1.100',
    ('ip.src','ip.dst','flow_dir')
] = (1,0,1)

#equivalent to second if statement    
csv_input.loc[
    csv_input['ip.dst'] = '192.168.1.100',
    ('ip.src','ip.dst','flow_dir')
] = (0,1,0)