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
值不等于它们自己。至少现在我知道为什么会这样。我仍然认为这是不受欢迎的行为。。。