You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

访问带MultiIndex的pandas DataFrame单元格为何丢失类型信息?

这是旧版本pandas存在的已知bug,不是你的使用方式有问题。

具体原因

用loc对带MultiIndex的DataFrame取单个标量时,旧版本pandas的内部逻辑会先把匹配到的整行提取为临时Series:只要该行存在浮点类型的列(你示例里的a列是float64),就会触发整行的类型向上提升,把原本是int64的b列也强制转成float64,最后返回的就是2.0。
单索引场景的loc走了更短的优化路径,不会触发整行类型转换,所以能保留原始的int64类型。

at不会出问题的原因很简单:它就是专门给单个单元格存取做的API,内部不会拉取整行做处理,直接根据行列定位读取原始存储的值,所以不管是单索引还是MultiIndex都能返回正确类型。

解决方法

  • 单个单元格读写优先用at,不仅类型不会错,性能也比loc高很多
  • 如果必须用loc,取值后可以显式转类型,比如df2.loc[(3,4),"b"].astype("int64"),或者调用.item()拿到Python原生的int值
  • 把pandas升级到1.4.0及以上版本,这个问题在后续版本已经被修复了

内容的提问来源于stack exchange,提问作者sds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 04:54:03