列数据与特定行值比较触发ValueError:仅可比较标签一致的Series对象
Pandas比较报错:ValueError: Can only compare identically-labeled Series objects
原代码:
def Test(file): trialGroup = (file["x_counter"] == 0) groupNum = file.loc[trialGroup].tail(1)["completed"] indicesToDelete = (file["completed"] == groupNum) return file.loc[indicesToDelete]
错误原因
groupNum = file.loc[trialGroup].tail(1)["completed"] 返回的不是单个整数,而是带索引的pandas Series对象(哪怕打印出来显示值是2)。用这个Series和file["completed"](另一个Series)比较时,pandas会尝试按索引对齐两个序列,因索引不匹配触发报错。而直接用整数比较时,pandas会把整数广播到整个Series,跳过索引对齐逻辑,所以能正常运行。
解决方法
把groupNum转换成单个标量值,常用三种方式:
- 用
.iloc[0]取第一个元素(tail(1)仅返回一行):
def Test(file): trialGroup = (file["x_counter"] == 0) groupNum = file.loc[trialGroup].tail(1)["completed"].iloc[0] indicesToDelete = (file["completed"] == groupNum) return file.loc[indicesToDelete]
- 用
.item()提取标量(仅适用于单个元素的Series):
def Test(file): trialGroup = (file["x_counter"] == 0) groupNum = file.loc[trialGroup].tail(1)["completed"].item() indicesToDelete = (file["completed"] == groupNum) return file.loc[indicesToDelete]
- 用
.values[0]获取numpy标量:
def Test(file): trialGroup = (file["x_counter"] == 0) groupNum = file.loc[trialGroup].tail(1)["completed"].values[0] indicesToDelete = (file["completed"] == groupNum) return file.loc[indicesToDelete]
以上方法都能将groupNum转为纯整数,和file["completed"]比较时直接按值匹配,解决报错问题。
内容的提问来源于stack exchange,提问作者user22170360
相关产品推荐
相关产品推荐

