Pandas 使用 If/Then/Else 语句在循环中抛出错误

Posted

技术标签:

【中文标题】Pandas 使用 If/Then/Else 语句在循环中抛出错误【英文标题】:Pandas Throwing Error in Loop Using If/Then/Else Statement 【发布时间】:2017-10-28 11:57:40 【问题描述】:

我发生了一个我无法弄清楚的奇怪错误。

希望得到一些帮助。

我的代码中有一个 if 语句如下:

if my_df.ix[my_df['SOMEINTEGER'] == another_df.ix[i,'SOMECOMPARABLEINTEGER'],'SOMECOLUMN'] == 'I':

    *** DO SOMETHING ***
    i+=1

此语句的作用是选择 my_df 中 'SOMEINTEGER' 等于 another_df.ix[i,'SOMECOMPARABLEINTEGER'] 中的整数值的行,并检查 my_df 中 'SOMECOLUMN' 中的列值是否等于 'I'

如果我将 if 语句作为单行代码运行,并将值设置为与数据帧索引值相对应的整数,则它可以工作。

如果我在更大的迭代中包含这个 if 语句(并且类似地将递增的 i 移出以便它正确递增,我会收到以下错误:

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

我无法确定错误的来源。

任何帮助/见解表示赞赏。

提前致谢。

【问题讨论】:

my_df 中可以有几行,其中 'SOMEINTEGER' 等于 another_df.ix[i,'SOMECOMPARABLEINTEGER'] 中的整数值,因此您将数组与点进行比较。 你想做什么?看起来你的括号不正确。 【参考方案1】:

答案包含在这篇文章中:

Evaluating pandas series values with logical expressions and if-statements

我猜,这是一个重复的问题(尽管我只是巧合)在进行了大量搜索后偶然发现了这个问题。

显然问题出在 Pandas 的特殊性上。以这种方式使用 Pandas 构造的 if 语句会生成一个 Pandas 系列对象。解决方法是将.any() 添加为:

if my_df.ix[my_df['SOMEINTEGER'] == another_df.ix[i,'SOMECOMPARABLEINTEGER'],'SOMECOLUMN'].any() == 'I':

【讨论】:

以上是关于Pandas 使用 If/Then/Else 语句在循环中抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

SqlAlchemy:case 语句(case - if - then -else)

PLSQL:if then else语句段

ORACLE If Then Else 语句与计数器和选择查询

SqlAlchemy:case语句(case - if - then -else)

php if then else语句语法错误某处[重复]

oracleif判断语句