当前位置:  开发笔记 > 编程语言 > 正文

获取支持NA /的布尔型熊猫列可为空

如何解决《获取支持NA/的布尔型熊猫列可为空》经验,为你挑选了1个好方法。

如何创建支持nan / missing值的dtype bool(或int)的pandas数据框列?

当我这样尝试时:

d = {'one' : np.ma.MaskedArray([True, False, True, True], mask = [0,0,1,0]),
'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print (df.dtypes)
print (df)

one 隐式转换为对象。同样类似ints

d = {'one' : np.ma.MaskedArray([1,3,2,1], mask = [0,0,1,0]),
'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)
print (df.dtypes)
print (df)

one在这里隐式转换为float64,并且我更喜欢如果我停留在int域中并且不使用其特质来处理浮点算术(在比较时始终具有容差,舍入误差等)。



1> fuglede..:

在整数情况下,从熊猫0.24(2019年1月)开始,您可以使用可为空的整数来实现所需的功能:

In [165]: df
Out[165]:
   one  two
a  1.0  1.0
b  3.0  2.0
c  NaN  3.0
d  1.0  4.0

In [166]: df.astype('Int64')
Out[166]:
   one  two
a    1    1
b    3    2
c  NaN    3
d    1    4

这可以通过将支持数组转换为来实现arrays.IntegerArray,并且布尔值没有等效的东西,但是在此GitHub问题和此PyData讨论中讨论了朝该方向的一些工作。您也可以编写自己的扩展类型来解决这种情况,但是如果您可以使用以整数0和1表示的布尔值,可以采用以下一种方法:

In [183]: df.one
Out[183]:
a     True
b    False
c      NaN
d     True
Name: one, dtype: object

In [184]: (df.one * 1).astype('Int64')
Out[184]:
a      1
b      0
c    NaN
d      1
Name: one, dtype: Int64

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有