使用NaN的

时间:2018-07-18 11:20:33

标签: python pandas dataframe set series

我正在使用熊猫清理一些数据文件并验证内容。在验证中,我将每列的内容与一组期望值进行比较,方法是:

for col_name, expected in expected_dict.items():
    col_values = set(df[col_name])
    if not col_values.issubset(expected):
        raise ValueError(str(col_values - expected),'in',col_name)

我遇到了NaN的一些意外行为。具体来说,set(series)将每个NaN视为唯一元素。我想出了一个解决方案,set(series.unique())

s = pd.Series([1,2,1,None,3,None])
set(s) ## Produces {nan, 1.0, 2.0, 3.0, nan}
set(s.unique()) ## Produces {nan, 1.0, 2.0, 3.0}

我的问题真的是为什么会遇到这种行为?我怀疑这与NaN在熊猫中的代表有关。

1 个答案:

答案 0 :(得分:0)

与所有其他数字不同,NaN的特性之一是NaN!= NaN。但是,set的实现首先在尝试插入新成员之前检查id(x)是否与哈希索引处的现有成员匹配。如果您有两个ID都为NaN的具有不同ID的对象,则将在集合中获得两个条目。如果它们具有相同的ID,则会折叠为一个条目