Pandas:为什么数字浮点数的默认列类型?

use*_*733 7 python csv nan pandas na

我正在使用Pandas 0.18.1和python 2.7.x. 我有一个空的数据帧,我先读了.我看到这些列的类型object是可以的.当我分配一行数据时,数值的类型将更改为float64.我期待intint64.为什么会这样?

有没有办法设置一些全局选项让Pandas知道数字值,默认情况下将它们视为int除非数据有.?例如,[0 1.0, 2.]第一列是int其他两个float64

例如:

>>> df = pd.read_csv('foo.csv', engine='python', keep_default_na=False)
>>> print df.dtypes
bbox_id_seqno    object
type             object
layer            object
ll_x             object
ll_y             object
ur_x             object
ur_y             object
polygon_count    object
dtype: object
>>> df.loc[0] = ['a', 'b', 'c', 1, 2, 3, 4, 5]
>>> print df.dtypes
bbox_id_seqno     object
type              object
layer             object
ll_x             float64
ll_y             float64
ur_x             float64
ur_y             float64
polygon_count    float64
dtype: object
Run Code Online (Sandbox Code Playgroud)

Ste*_*han 7

Pandas不可能将NaN值存储在整数列中.

这是float数据存储的明显默认选择,因为一旦出现缺失值,Pandas就必须更改整个列的数据类型.在实践中经常会出现缺失值.

至于为什么这是,这是从Numpy继承的限制.基本上,Pandas需要留出一个特定的位模式来表示NaN.这对于浮点数是直截了当的,它在IEEE 754标准中定义.对于固定宽度的整数,这样做更笨拙,效率更低.

更新

熊猫的惊人新闻0.24.IntegerArray是一个实验性功能,但可能会使我原来的答案过时.因此,如果您在2019年2月27日或之后阅读此内容,请查看该功能的文档.