Python 对None的比较在元素方面有效,但在dataframe中无效

Python 对None的比较在元素方面有效,但在dataframe中无效,python,python-2.7,pandas,Python,Python 2.7,Pandas,我正在尝试查看数据帧中的值是否有任何变化,从一行到另一行。特别是一列有很多None值。 如果我在元素方面检查None值之间的不相等性,它会给出我期望的答案(即,None!=None返回False),但当我对列进行相同的比较时就不会了 下面是一个简单的工作示例: >>> example_data = [None]*3 + ['a','b','b'] + [None]*4 >>> df = pd.DataFrame(example_data, columns =

我正在尝试查看数据帧中的值是否有任何变化,从一行到另一行。特别是一列有很多
None
值。
如果我在元素方面检查
None
值之间的不相等性,它会给出我期望的答案(即,
None!=None
返回
False
),但当我对列进行相同的比较时就不会了

下面是一个简单的工作示例:

>>> example_data = [None]*3 + ['a','b','b'] + [None]*4
>>> df = pd.DataFrame(example_data, columns = ['col1'])
>>> print df

    col1
0   None
1   None
2   None
3   a
4   b
5   b
6   None
7   None
8   None
9   None
为了查看值是否从一行更改到下一行,我将移动所有内容并比较值:

>>> did_it_change = (df != df.shift(1))
>>> print did_it_change

    col1
0   True
1   True
2   True
3   True
4   True
5   False
6   True
7   True
8   True
9   True
只要比较中不涉及
None
,它就是准确的(例如,第5行将其先前的
b
值更改为
b
,因此它没有更改)

如果我选中单个元素,它将按预期工作:

>>> df.loc[1,'col1'] != df.loc[2,'col1']
False
但这并不是出现在整列中的答案:
dod_it_change.loc[1,:]
True

如果我使用
而不是
None
,我确实会得到预期的结果,但是用空字符串替换
None
似乎是任意和多余的

这是我所期望的结果

>>> example_data = [""]*3 + ['a','b','b'] + [""]*4
>>> df = pd.DataFrame(example_data, columns = ['col1']) 
>>> did_it_change = (df != df.shift(1))
>>> print did_it_change

    col1
0   True
1   False
2   False
3   True
4   True
5   False
6   True
7   False
8   False
9   False

这是怎么回事?如果我在dataframe列而不是其元素上调用它,为什么与
None
的比较会给出不同的答案

我怀疑在执行数据帧级操作时,
None
正在引擎盖下转换为
np.nan
,这将解释输出为
np.nan!=np.nan
根据定义返回
True
。查看
df==df
的输出。理论不错!我刚刚运行了
df==df
,果然,
None
值不等于它们自己。至少现在我知道为什么会这样。我仍然认为这是不受欢迎的行为。。。