pandas使用df.at取值报Invalid call for scalar access错误但赋值正常问题
原因说明
.at索引器的核心设计定位是单个标量值的存取,取值场景下要求必须同时传入唯一匹配的行标签和列标签,否则就会触发标量访问错误。
你执行df.at[df['a']==1]的时候,只传入了行筛选的布尔掩码,没有指定列,pandas无法确定你要提取的是单个标量值,完全不符合.at的取值规则,所以直接抛出ValueError。- 赋值场景下pandas对
.at做了特殊的兼容处理:只要同时传入行筛选条件和指定列,哪怕行条件匹配到多行数据,pandas也会自动把赋值内容广播到所有符合条件的单元格,不需要严格限制为单个标量匹配,所以df.at[df['a']==1,'b'] = 0可以正常执行。
补充:如果你要按布尔条件筛选取值,应该用
.loc索引器替代.at,比如df.loc[df['a']==1, 'b']就可以正常获取对应的值。
内容的提问来源于stack exchange,提问作者xxyao
相关产品推荐
相关产品推荐

