如何修复'ValueError:DataFrame的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。何时使用

问题描述 投票:0回答:2

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

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

如果YearsInCanada == AgeCountryBorn == Canada,我想重新编码YearsInCanada == 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']

谢谢

python pandas valueerror
2个回答
1
投票

使用np.where()的解决方案:

df.YearsInCanada=np.where((df['YearsInCanada'].isna()) & (df['CountryBorn'] == 'Canada'),\
                      df.YearsInCanada.fillna(df.Age),df.YearsInCanada)
print(df)

   Age CountryBorn  YearsInCanada
0   87         NaN           77.0
1   67      Canada           67.0
2   29          US            7.0
3   26          US           10.0
4   22          US           12.0
5   35      Canada           35.0
6   45      Canada           45.0

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

这将返回(派生)数据框。 qazxsw poi需要一个布尔表达式。

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

© www.soinside.com 2019 - 2024. All rights reserved.