如何确保pandas数据框索引中的np.int8类型骰子点数保持原类型?
问题原因及解决办法
为什么单个索引元素是np.int64?
你设置的索引本身确实是np.int8类型,但Pandas在单独取出索引元素时,会自动把小整数类型的元素转换成np.int64返回——这是Pandas的默认行为,目的是避免小整数类型可能出现的溢出问题。你可以先验证索引整体的类型:
print(data_frame_of_faces_and_weights.index.dtype)
运行后会输出int8,说明索引的整体类型是符合预期的,只是单个元素被自动转换了类型。
解决办法
如果你需要让取出的单个元素保持np.int8类型,试试这几种方法:
方法一:用
take()方法指定类型face = data_frame_of_faces_and_weights.index.take([0], dtype=np.int8)[0] print(type(face)) # 输出 <class 'numpy.int8'>方法二:取出后手动转换类型
直接把取出的元素显式转成np.int8:face = np.int8(data_frame_of_faces_and_weights.index[0]) print(type(face)) # 输出 <class 'numpy.int8'>方法三:转成numpy数组后取值
先把索引转换成指定类型的numpy数组,再取元素:index_array = data_frame_of_faces_and_weights.index.to_numpy(dtype=np.int8) face = index_array[0] print(type(face)) # 输出 <class 'numpy.int8'>
内容的提问来源于stack exchange,提问作者Tom Lever
相关产品推荐
相关产品推荐

