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

使用Pandas DataFrame的行、列索引組合提取數(shù)據(jù)后,常常需要通過某些值判斷后對其進(jìn)一步處理,而當(dāng)索引出現(xiàn)重復(fù)項時,進(jìn)行值判斷就會報標(biāo)題所示的錯誤:ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
這是因為重復(fù)索引會返回Series,而非標(biāo)量,而又有多個值的Series與標(biāo)量進(jìn)行判斷時,Pandas認(rèn)為結(jié)果可能是有的值滿足條件,有的值不滿足條件,因而其結(jié)果Pandas是無法推斷的,故而報錯。
這里為了說明此種情況,故意讓索引date在'2016-1-1'發(fā)生重疊:
date_range1=pd.date_range('2016-1-1','2017-11-15')
yz1=DataFrame(np.zeros((len(n_ix1),1)), columns=['value'], index=n_ix1)
yz1['value']=12.362
date_range2=pd.date_range('2015-2-10','2016-1-1')
yz2=DataFrame(np.zeros((len(n_ix2),1)), columns=['value'], index=n_ix2)
yz2['value']=9.5
result=pd.concat([yz1,yz2])
其結(jié)果為:
2015-02-10 9.500
... ...
2016-01-01 9.500
2016-01-01 12.362
... ...
2017-11-09 12.362
2017-11-10 12.362
2017-11-13 12.362
2017-11-14 12.362
2017-11-15 12.362
此時使用下面的條件語句進(jìn)行判斷時就會報錯ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().:
for new_date in result.index:
if(result.loc[new_date, 'value']>0.1):
要根除這種錯誤,主要是要去發(fā)現(xiàn)是否有重復(fù)索引,可以通過DataFrame.index.is_unique進(jìn)行判斷。如果原始數(shù)據(jù)文件中就具有重復(fù)索引,則可以通過去除重復(fù)索引值來糾正錯誤,具體方法如下:
result= result.groupby(result.index).first()

提醒:Pandas的DataFrame.drop_duplicates()方法是用來丟棄行列索引下的重復(fù)項的,而非索引重復(fù)項。

http://www.zzkook.com/content/valueerror-truth-value-dataframe-ambiguous-use-aempty-abool-aitem-aany-or-aallwen-ti-jie-jue

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容