如何修复“ValueError:DataFrame 的真值不明确”。

我想根据多列条件重新分配值,但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 如果CountryBorn == 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']

谢谢


慕田峪7331174
浏览 546回答 2
2回答

隔江千里

解决方案使用np.where():df.YearsInCanada=np.where((df['YearsInCanada'].isna()) & (df['CountryBorn'] == 'Canada'),\                      df.YearsInCanada.fillna(df.Age),df.YearsInCanada)print(df)   Age CountryBorn  YearsInCanada0   87         NaN           77.01   67      Canada           67.02   29          US            7.03   26          US           10.04   22          US           12.05   35      Canada           35.06   45      Canada           45.0

Smart猫小萌

df.loc[(df['YearsInCanada'] == None) & (df['CountryBorn'] == 'Canada')]这将返回一个(派生的)数据帧。 if需要一个布尔表达式。如果您尝试进行矢量化分配,则必须将其编码为 Pandas 操作 + 过滤器,而不是 Python if。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python