我正在尝试查看我的数据框中是否有任何值在行之间发生变化。特别是一列有很多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
的比较会给出不同的答案?