此问题已在此处有答案:
Truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()(14个回答)
Create new column based on values from other columns / apply a function of multiple columns, row-wise in Pandas(8个回答)
4天前关闭。
我正在使用Pandas,并试图使用Python if-else语句(又名三元条件运算符)创建一个新列,以避免被零除。
例如下面的例子,我想通过除以A/B来创建一个新的列C。我想使用if-else语句来避免除以0。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0, 5, size=(100, 2)), columns=list('AB'))
df.head()
# A B
# 0 1 3
# 1 1 2
# 2 0 0
# 3 2 1
# 4 4 2
df['C'] = (df.A / df.B) if df.B > 0.0 else 0.0
但是,我从最后一行得到一个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我在StackOverflow上搜索了一下,发现了其他关于这个错误的帖子,但是没有一个涉及这种类型的if-else语句。一些职位包括:
Truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
The truth value of a Series is ambiguous in dataframe
Error: The truth value of a Series is ambiguous - Python pandas
如果你能帮忙的话,我将不胜感激。
5条答案
按热度按时间idv4meu81#
那做什么呢
其内容如下:
如果
df.B
为正,则返回df.A/df.B
,否则返回0.
0qx6xfy62#
df.B > 0
产生一个系列,例如:返回多个值,这会导致歧义(一些值为True,而另一些值为False)。
一个解决方案是使用
np.where
:w41d8nur3#
基于上面关于迭代 Dataframe 的@vaishnav提案,这里是一个工作提案:
输出量:
oo7oh9g94#
使用apply lambda
sxpgvts35#
或者你可以打开一个for循环。