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

使用df.loc提取DataFrame值时类型不符的问题及解决咨询

Pandas 提取值类型差异问题解析与解决

这是个很典型的pandas类型处理问题,我来帮你拆解原因和解决方法:

为什么两种写法返回的类型不一样?

当你用df.loc[0, ['x', 'y']]的时候,pandas会返回一个Series对象。而Series的核心特性之一是:它的所有元素必须共享同一个数据类型(dtype)。你的x列是float64、y列是int64,pandas会自动做类型提升——把整个Series的 dtype 转为float64(因为整数转浮点数不会丢失信息,反过来则可能丢失精度)。所以当你解构这个Series时,y_val就变成了float类型。

而df.loc[0, 'y']是直接提取单个列的单个值,pandas会严格保留该列原本的int64类型,返回的是numpy.int64对象。

怎么用#1的语法拿到整数类型的y值?

有几种简单的方法可以实现:

  • 方法1:提前转换Series中y的类型
    在解构前,显式把Series里的y转回int64:

    _, y_val = df.loc[0, ['x', 'y']].astype({'y': 'int64'})
    print(type(y_val))  # <class 'numpy.int64'>
    
  • 方法2:提取后手动转成原生整数
    如果只需要Python原生的int类型,直接转换就行:

    _, y_val = df.loc[0, ['x', 'y']]
    y_val = int(y_val)
    print(type(y_val))  # <class 'int'>
    
  • 方法3:用numpy数组保留原始类型
    把Series转成numpy数组,数组会保留各元素的原始类型:

    x_val, y_val = df.loc[0, ['x', 'y']].to_numpy()
    print(type(y_val))  # <class 'numpy.int64'>
    

这样就能在同时提取x和y的情况下,拿到你想要的整数类型y值啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:22:44