python中10none_在Python中,比较None系列

我正在使用python shift函数来比较Series中的值是否等于previus值.基本上

import pandas as pd

a = pd.Series([2, 2, 4, 5])

a == a.shift()

Out[1]:

0 False

1 True

2 False

3 False

dtype: bool

这是预期的. (第一次比较是假的,因为我们正在与移位系列的“NA”进行比较).现在,我确实有系列,我没有任何价值,即. “没有”,就像这样

b = pd.Series([None, None, 4, 5])

这里两个“无”的比较给出“假”

b == b.shift()

Out[3]:

0 False

1 False

2 False

3 False

dtype: bool

我愿意接受某种哲学推理,认为比较“无”是毫无意义的等等

c = None

d = None

c == d

Out[4]: True

这里发生了什么?!

而且,我真正想知道的是;我怎么能对我的“b”系列进行比较,因为我希望它将“无”视为平等?那就是我想要b == b.shift()给出与== a.shift()给出的相同的结果.

解决方法:

None被转换为NaN,NaN具有不等于它自己的属性:

[54]:

b = pd.Series([None, None, 4, 5])

b

Out[54]:

0 NaN

1 NaN

2 4.0

3 5.0

dtype: float64

正如你在这里看到的:

In[55]:

b==b

Out[55]:

0 False

1 False

2 True

3 True

dtype: bool

我不知道你怎么能让它正常工作,虽然这有效:

In[68]:

( (b == b.shift()) | ( (b != b.shift()) & (b != b) ) )

Out[68]:

0 True

1 True

2 False

3 False

dtype: bool

你会得到第一行的错误结果,因为当你向下移动时,你会与一个不存在的行进行比较:

In[69]:

b.shift()

Out[69]:

0 NaN

1 NaN

2 NaN

3 4.0

dtype: float64

所以NaN比较布尔逻辑中的True,因为第一行是NaN,移位序列的第一行也是如此.

要解决第一行False-positive,您可以将结果结果切片以忽略第一行:

In[70]:

( (b == b.shift()) | ( (b != b.shift()) & (b != b) ) )[1:]

Out[70]:

1 True

2 False

3 False

dtype: bool

至于为什么它被转换,Pandas试图将数据强制转换为兼容的numpy,这里选择了float因为int和None值,None和NaN不能用int表示

要获得与示例中相同的结果,您应该将第一行覆盖为False,因为它始终会失败:

In[78]:

result = pd.Series( ( (b == b.shift()) | ( (b != b.shift()) & (b != b) ) ) )

result.iloc[0] = False

result

Out[78]:

0 False

1 True

2 False

3 False

dtype: bool

标签:python,pandas

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值