有没有一种更好的方法来保持numpy
数组的数据类型固定为int
(或int64
或其他任何类型),同时内部仍有一个元素列为numpy.NaN
特别是,我正在将内部数据结构转换为Pandas DataFrame。在我们的结构中,我们有整数类型的列,它们仍然有NaN(但是列的dtype是int)。如果我们把它变成一个DataFrame,它看起来会把所有的东西都转换成一个浮点型,但我们真的很想成为int
。
有什么想法?
尝试过的:
我尝试在pandas.DataFrame下使用coerce_float=False
下的from_records()
函数,但没有帮助。我还尝试在NaN fill_value中使用NumPy掩码数组,这也不起作用。所有这些都会导致列数据类型变为浮点型。
发布于 2018-08-24 11:36:21
此功能已添加到pandas (从0.24版开始):https://pandas.pydata.org/pandas-docs/version/0.24/whatsnew/v0.24.0.html#optional-integer-na-support
此时,它需要使用扩展数据类型Int64 (大写),而不是默认的数据类型int64 (小写)。
发布于 2012-07-19 02:43:28
NaN
不能存储在整数数组中。这是目前已知的熊猫的局限性;我一直在等待NumPy中的nA值的进展(类似于R中的NAs ),但NumPy似乎至少需要6个月到一年的时间才能获得这些功能:
http://pandas.pydata.org/pandas-docs/stable/gotchas.html#support-for-integer-na
(此功能是从pandas的0.24版本开始添加的,但请注意,它需要使用扩展数据类型Int64 (大写),而不是默认的数据类型int64 (小写):https://pandas.pydata.org/pandas-docs/version/0.24/whatsnew/v0.24.0.html#optional-integer-na-support )
发布于 2014-12-09 07:41:00
如果性能不是主要问题,您可以改为存储字符串。
df.col = df.col.dropna().apply(lambda x: str(int(x)) )
然后你就可以随心所欲地使用NaN
了。如果您确实想要整数,可以使用-1
、0
、1234567890
或其他一些专用值来表示NaN
,具体取决于应用程序。
您还可以临时复制列:一个是浮点型的,另一个是实验性的,是整型或字符串。然后在每个合理的位置插入asserts
,检查两者是否同步。经过足够的测试后,你就可以放手了。
https://stackoverflow.com/questions/11548005
复制相似问题