Python numpy / pandas中的Nans行为不一致

时间:2019-05-24 09:46:14

标签: python pandas numpy nan

当我在Python中使用numpypandas进行某些集合操作时,遇到了一个奇怪的现象,我认为这会导致nan中的不一致处理。

让我们假设我们有一个非常简单的情况,即以集合为我们的兴趣点:

import numpy as np
import pandas as pd

a = {1, 2, 3, np.nan}
b = {1, 2, 4, np.nan}

print(a - b)

出局:

{3}

这很好,我们希望是这样,但是让我们继续一些更复杂的示例,其中包括pandas系列/数据帧:

series = pd.Series([1, 2, 3, np.nan, 1, 2, 3])
d = set(series)
print(d)

出局:

{nan, 1.0, 2.0, 3.0}

再一次,很好。不过,当我们打电话时:

print(d - b)  # the same applies to a single column of a data frame in place of a series

结果是(对我来说出乎意料):

{nan, 3.0}

输出中仍然有一个nan值。

我确实知道,当我们创建series变量时,所有输入值都在幕后强制转换为float64格式,包括nan值。

type(series.iloc[3])

出局:

numpy.float64

自由创建的np.nan的类型仅为float。当然,两种情况下的np.isnan()函数都将返回True。我仍然认为这是不一致的,因为我假设所有基本的Python操作(无疑是set操作所属的Python操作)将以与数字相似的方式对待nan。即使对集合中的数字应用了与nan相同的类型转换(在纯Python中,它们是int,而在pandas系列中,它们是{{1 }}},设置操作仍将它们视为相同的实体,并充分删除值。 float应该也是(准)数字,但处理方式有所不同。是由于某种原因无法解决的功能,错误或已确认的情况?

Python版本:3.6.6。 numpy版本:1.16.2。 熊猫版本:0.24.2。

0 个答案:

没有答案