NumPy或Pandas:保持数组types为整数,同时具有NaN值

是否有一个首选的方法来保持numpy数组的数据types固定为int (或int64或其他),同时还有一个列表中的元素列为numpy.NaN

特别是,我将内部数据结构转换为Pandas DataFrame。 在我们的结构中,我们有整数types的列仍然有NaN(但列的dtype是int)。 如果我们把这个数据框设置成DataFrame的话,似乎所有东西都会重新浮动,但我们真的很想成为int

思考?

事情尝试:

我尝试使用from_records()下的from_records()函数, coerce_float=False ,这没有帮助。 我也尝试使用NumPy屏蔽数组,NaN fill_value,也没有工作。 所有这些导致列数据types成为一个浮点数。

NaN不能存储在整数数组中。 这是目前大pandas的一个已知限制。 我一直在等待NumPy的NA值取得进展(类似于R中的NAs),但是在NumPy获得这些特性之前至less要有6个月到一年的时间,看来:

http://pandas.pydata.org/pandas-docs/stable/gotchas.html#support-for-integer-na

如果性能不是主要问题,则可以存储string。

 df.col = df.col.dropna().apply(lambda x: str(int(x)) ) 

然后你可以尽可能多的和NaN混合。 如果你真的想要整数,取决于你的应用程序,你可以使用-1 ,或0 ,或1234567890 ,或其他一些专用的值来表示NaN

您也可以临时复制列:一个像你一样,用浮动; 另一个实验,用整数或string。 然后在每个合理的地方插入asserts ,检查两者是否同步。 经过足够的testing,你可以放开浮游物。