为何DataFrame整数列的值有时会以浮点数形式返回?
问题原因与解决办法
为什么类型不一致?
当你用iloc[0]提取整行时,返回的是一个Series对象。Pandas的Series会自动统一所有元素的数据类型——因为你的DataFrame里存在float64类型的列b,整数可以无损转换为浮点数,但浮点数无法直接转换为整数,所以Series会把整行的所有元素统一为float64类型,这就导致原本是int32的c列值也被转成了浮点数。
而df.c.values[0]是直接从c列的底层numpy数组中取元素,绕过了Series的类型统一逻辑,所以能保持原有的int32类型。
解决方法
直接访问单个元素:不要先提取整行再取列,直接定位目标元素即可,示例代码:
df.loc[0, 'c'] # 或者 df.iloc[0, 2]这样会直接返回
c列原有的int32类型值,无需额外转换。提取整行但保留原类型:如果需要获取整行数据同时保留各列原始类型,可以用
df.iloc[[0]]返回单行DataFrame(而非Series),再提取c列的值:df.iloc[[0]]['c'].values[0]
内容的提问来源于stack exchange,提问作者feetwet
相关产品推荐
相关产品推荐

