NumPy or Pandas: Keeping array type as integer while having a NaN value
有没有一种更好的方法来保持
特别是,我正在将内部数据结构转换为熊猫数据帧。在我们的结构中,整型列仍然有NaN(但该列的dtype是int)。如果我们把它变成一个数据帧,它似乎会把所有的东西都重铸成一个浮点,但是我们真的很想成为
思想?
尝试过的事情:
我尝试在pandas.dataframe下使用
http://pandas.pydata.org/pandas-docs/stable/gotchas.html支持整型NA
(此功能从0.24版pandas开始添加,但请注意,它需要使用扩展名dtype int64(大写),而不是默认的dtype int64(小写):https://pandas.pydata.org/pandas-docs/version/0.24/whatsnew/v0.24.0.html可选整数NA支持)
此功能已添加到熊猫(从0.24版开始):https://pandas.pydata.org/pandas-docs/version/0.24/whatsnew/v0.24.0.html可选整数NA支持
此时,它需要使用扩展名dtype int64(大写),而不是默认的dtype int64(小写)。
如果性能不是主要问题,可以存储字符串。
1 | df.col = df.col.dropna().apply(lambda x: str(int(x)) ) |
然后你可以随心所欲地和
您还可以临时复制列:一个列和您的列一样,带有浮点;另一个列是实验列,带有int或字符串。然后在每个合理的位置插入
这不是所有情况的解决方案,但我的(基因组坐标)我使用0作为NaN
1 | a3['MapInfo'] = a3['MapInfo'].fillna(0).astype(int) |
号
这至少允许使用适当的"本机"列类型,如减法、比较等操作按预期工作。
熊猫v0.24+
支持整数系列中的
一般来说,在可能的情况下,最好与
文档确实建议:"一种可能是使用
1 2 3 4 5 6 7 8 9 | s = pd.Series([1, 2, 3, np.nan]) print(s.astype(object)) 0 1 1 2 2 3 3 NaN dtype: object |
出于美观的原因,例如输出到文件,这可能更可取。
熊猫v0.23及更早:背景In the absence of high performance NA support being built into NumPy
from the ground up, the primary casualty is the ability to represent
NAs in integer arrays.This trade-off is made largely for memory and performance reasons, and
also so that the resulting Series continues to be"numeric".
号
由于
1 2 3 4 5 | Typeclass Promotion dtype for storing NAs floating no change object no change integer cast to float64 boolean cast to object |
。
现在这是可能的,因为熊猫v 0.24.0
熊猫0.24.x发行说明引言:"熊猫获得了保存缺少值的整数数据类型的能力。