熊猫中的布尔值和缺失值

Fab*_*ner 7 python dataframe pandas

我试图弄清楚熊猫数据框中的列是否是布尔值(如果是,是否有缺失值等等)。

为了测试我创建的函数,我尝试创建一个带有缺失值的布尔列的数据框。但是,我会说缺失值在 python 中完全“无类型”处理,并且有一些奇怪的行为:

> boolean = pd.Series([True, False, None])
> print(boolean)

0     True
1    False
2     None
dtype: object
Run Code Online (Sandbox Code Playgroud)

因此,当您将 None 放入列表时,它被视为对象,因为 python 无法将类型 bool 和 type(None)=NoneType 混合回 bool。math.nan和也会发生同样的事情numpy.nan。当你试图强迫熊猫进入它不想去的区域时,最奇怪的事情发生了:-)

> boolean = pd.Series([True, False, np.nan]).astype(bool)
> print(boolean)
0     True
1    False
2     True
dtype: bool
Run Code Online (Sandbox Code Playgroud)

所以'np.nan'被转换为'True'?

问题:

  1. 给定一个数据表,其中一列是“对象”类型,但实际上它是一个带有缺失值的布尔列:我如何弄清楚?过滤非缺失值后,它仍然是“对象”类型……我是否需要将每一列的 try-catch-cast 实现为每个可以想象的数据类型,以便查看列的真实性质?

  2. 我想对于为什么 np.nan 被强制转换为 True 有一个合乎逻辑的解释,但这是软件 pandas/python 本身不需要的行为,对吗?那么我应该提交错误报告吗?

Sos*_*sel 3

Q1:我会从组合开始

np.any(pd.isna(boolean))
Run Code Online (Sandbox Code Playgroud)

确定列中是否有任何 None 值,并使用

set(boolean)
Run Code Online (Sandbox Code Playgroud)

你可以识别里面是否只有 True、False 和 None。与过滤相结合(如果您还喜欢打字),您应该完成。

Q2:参见@WeNYoBen的评论