pandas Series的真值不明确,请在if else语句中使用.empty、.bool()、. item()、.any()或.all()[重复]

jhdbpxl9  于 2023-03-21  发布在  其他
关注(0)|答案(2)|浏览(121)

此问题在此处已有答案

(13个答案)
16小时前关门了。
我运行一个“if...else...”语句,类似于:

if df['column1']==0:
    df['column2']=0
else:
    df['column2']=100*['column3']

得到如下“数值误差”:The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
由于我是Python新手,我希望你能告诉我这个错误的潜在原因。我还没有在StackOverflow上找到类似的问题。(不幸的是)我不能提供一个数据示例。
谢谢你。

yqkkidmi

yqkkidmi1#

希望你喜欢学习python:)
在你的代码中,这意味着你将第一列的所有值与零进行比较,有时候值等于零,有时候不等于零。2这会引起歧义。
如果你想用if语句创建新列,你可以使用apply函数。2它将比较每一行中的值。

df['column2'] = df.apply(lambda x: 0 if x['column1'] == 0 else 100*x['column3'], axis=1) 
#axis 1 means row
jdgnovmf

jdgnovmf2#

df['column1']==0返回一系列布尔值。因此,if语句实质上等效于

>>> if pd.Series([True, True, False]): # I used dummy values.
...     pass

if语句应该计算True(因为它不是零长度)还是False(因为它有False值)?目前还不清楚,因此,panda生成了一个ValueError
根据您的使用情形,可以使用anyall

>>> import pandas as pd
>>> df = pd.DataFrame({'col': [1, 2, 0]})
>>> 
>>> df
   col
0    1
1    2
2    0
>>> if (df['col'] == 0).all():
...     print("All values are zeros")
... 
>>> if (df['col'] == 0).any():
...     print("At least one of the value is zero")
... 
At least one of the value is zero

另见。

  • FAQ:对Pandas使用if/truth语句

相关问题