将整数列中的值替换为NA,同时保留最接近原始类型的类型



我有一个Numpy数组,它具有任意的平面结构数据类型,其中一些列是整数,一些列是datetime64,一些是浮点等

>>> import numpy as np
>>> ar = np.array([(1, -1), (-1, 2)], dtype=[('a', 'i2'), ('b', 'i4')])

Pandas数据帧是从这个numpy数组中直接创建的,完全遵循其模式:

>>> import pandas as pd
>>> df = pd.DataFrame(ar)
>>> df
a  b
0  1 -1
1 -1  2
>>> df.dtypes
a    int16
b    int32
dtype: object

现在我想说的是,将这个数据帧中的所有-1值替换为NA,同时尽可能地保留原始数据类型。基本上是这样的:

>>> df_with_na = df.replace(-1, pd.NA)
>>> df_with_na
a     b
0     1  <NA>
1  <NA>     2

只是这不起作用,因为列dtypes已转换为对象

>>> df_with_na.dtypes
a    object
b    object
dtype: object

其与仅仅将CCD_ 3映射到CCD_

>>> df_with_na.dtypes
a    Int16
b    Int32
dtype: object

有没有一种方法可以将int16等盲目地转换为屏蔽的可为null的扩展类型,或者最好是使带有NAreplace更改为扩展类型(如果它最初不是(,而不必编写另一组具有所有可能扩展的查找表?

我建议在对数据帧执行任何操作之前,先将所有的dtype转换为可为null的dtype:

>>> df.dtypes
a    int16
b    int32
dtype: object
>>> df.convert_dtypes().dtypes
a    Int16
b    Int32
dtype: object

为了安全起见,您可能需要将convert_integerFalse之外的所有夸尔格都设置为安全的。

相关内容

  • 没有找到相关文章

最新更新