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)
ORACLE If Then Else 语句与计数器和选择查询