使用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
相关产品推荐
相关产品推荐

