Python 如何修复';ValueError:数据帧的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all();何时?;使用
我想根据多列条件重新分配值,但出现Python 如何修复';ValueError:数据帧的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all();何时?;使用,python,pandas,valueerror,Python,Pandas,Valueerror,我想根据多列条件重新分配值,但出现ValueError。我用&代替了和,这通常是解决此类错误的答案。我的目标和准则如下: ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 如果CountryBorn==Canada和YearsInCanada==None df Age CountryBorn YearsInCan
ValueError
。我用&
代替了和
,这通常是解决此类错误的答案。我的目标和准则如下:
ValueError: The truth value of a DataFrame is ambiguous.
Use a.empty, a.bool(), a.item(), a.any() or a.all().
如果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']
谢谢
这将返回一个(dervied)数据帧<代码>如果需要布尔表达式
如果您试图进行矢量化赋值,则必须将其编码为Pandas action+筛选器,而不是PythonIf
这将返回一个(dervied)数据帧<代码>如果需要布尔表达式
如果您试图进行矢量化分配,则必须使用以下方法将其编码为Pandas action+筛选器,而不是PythonIf
解决方案:
解决方案使用:
为什么最后一个值是35?不是应该是45吗?@anky_91谢谢你指出,是个打字错误。为什么最后一个值是35?“应该是45吗?”@anky_91谢谢你指出,一个打字错误。
df.loc[(df['YearsInCanada'] == None) & (df['CountryBorn'] == 'Canada')]
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