pandas使用set_index设置索引后DataFrame单元格返回异常对象问题
原因说明
- 返回多行结果而非单个值:你用作索引的
SubProjectId列存在重复值,至少有2行数据的SubProjectId取值为32213。Pandas行索引本身允许重复值存在,用32213取值时会匹配到所有对应行,返回的是LoadNodes列对应的Series对象,而非单个单元格的值。 - 字符串
'[]'显示为[]:这只是Pandas打印Series时的渲染效果,数据本身没有发生修改。你可以执行multi['LoadNodes'][32213].iloc[0]验证,返回结果仍然是原字符串'[]'。
解决方案
- 确认重复索引:执行
multi.index.is_unique,返回False即可验证重复索引的存在 - 临时取单个值:如果只需要第一条匹配结果,用
multi['LoadNodes'].loc[32213].iloc[0]就能拿到单个字符串值 - 彻底解决:如果业务逻辑中
SubProjectId应该是唯一值,先去重再设置索引:
# 保留第一个重复项,删除后续重复的行 loads = loads.drop_duplicates('SubProjectId', keep='first') multi = loads.set_index('SubProjectId') # 此时取值会直接返回单个值 multi['LoadNodes'][32213]
内容的提问来源于stack exchange,提问作者D4w1d
相关产品推荐
相关产品推荐

