小编典典

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

python

我正在将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

阅读 218

收藏
2021-01-20

共1个答案

小编典典

熊猫不可能将NaN值存储在整数列中。

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

至于 为什么, 这是继承自Numpy的限制。基本上,熊猫需要预留特定的位模式来表示NaN。这对于浮点数很简单,它是在IEEE
754标准中定义的。对于固定宽度的整数,这样做比较麻烦且效率较低。

更新资料

激动人心的新闻在熊猫0.24。IntegerArray是一项实验性功能,但可能会使我的原始答案过时了。因此,如果您在2019年2月27日或之后阅读本文,请查看该功能的文档

2021-01-20