无比较在元素方面有效,但在数据框

时间:2017-03-21 20:38:35

标签: 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 = ['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

但这不是完整专栏中显示的答案:did_it_change.loc[1,:]True

如果我使用""代替None,我确实得到了预期的结果,但用空字符like in this question替换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

这里发生了什么?如果我在数据框列而不是其元素上调用它,为什么与None的比较会给出不同的答案?

0 个答案:

没有答案