首页 > 解决方案 > 如何修复'ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。何时使用 &

问题描述

我想根据多列条件重新分配值,但ValueError出现了。我使用&了而不是and,这通常是解决此类错误的答案。我的目标和代码如下:

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

我想重新编码YearsInCanada == Age ifCountryBorn == CanadaYearsInCanada == None

df
Age    CountryBorn    YearsInCanada
87     NaN            77      
67     Canada         67
29     US             7
26     US             10
22     US             12
35     Canada         NaN
45     Canada         NaN

expected output
Age    CountryBorn    YearsInCanada
87     NaN            77      
67     Canada         67
29     US             7
26     US             10
22     US             12
35     Canada         35
45     Canada         45

我的以下代码显示了ValueError

    if df.loc[(df['YearsInCanada'] == None) & (df['CountryBorn'] == 'Canada')]:
        df['YearsInCanada'] == df['Age']

    else:
        df['YearsInCanada'] == df['YearsInCanada']

谢谢

标签: pythonpandasvalueerror

解决方案


df.loc[(df['YearsInCanada'] == None) & (df['CountryBorn'] == 'Canada')]

这将返回一个(导出的)数据框。 if需要一个布尔表达式。

如果您尝试进行矢量化分配,则必须将其编码为 Pandas 动作 + 过滤器,而不是 Python if


推荐阅读