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

阿里云2000元红包!本站用户参与享受九折优惠!

使用Pandas DataFrame的行、列索引组合提取数据后,常常需要通过某些值判断后对其进一步处理,而当索引出现重复项时,进行值判断就会报标题所示的错误:ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
这是因为重复索引会返回Series,而非标量,而又有多个值的Series与标量进行判断时,Pandas认为结果可能是有的值满足条件,有的值不满足条件,因而其结果Pandas是无法推断的,故而报错。
这里为了说明此种情况,故意让索引date在’2016-1-1’发生重叠:
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])
其结果为:
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
此时使用下面的条件语句进行判断时就会报错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):
要根除这种错误,主要是要去发现是否有重复索引,可以通过DataFrame.index.is_unique进行判断。如果原始数据文件中就具有重复索引,则可以通过去除重复索引值来纠正错误,具体方法如下:
result= result.groupby(result.index).first()

提醒:Pandas的DataFrame.drop_duplicates()方法是用来丢弃行列索引下的重复项的,而非索引重复项。

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

https://www.jianshu.com/p/86414345f9ec

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
pandas
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论