<p>将<code>None</code>转换为<code>NaN</code>和{<cd2>}具有不等于自身的属性:</p>
<pre><code>[54]:
b = pd.Series([None, None, 4, 5])
b
Out[54]:
0 NaN
1 NaN
2 4.0
3 5.0
dtype: float64
</code></pre>
<p>如您所见:</p>
^{pr2}$
<p>我不确定您如何才能使其正常工作,尽管它可以:</p>
<pre><code>In[68]:
( (b == b.shift()) | ( (b != b.shift()) & (b != b) ) )
Out[68]:
0 True
1 True
2 False
3 False
dtype: bool
</code></pre>
<p>第一行将得到一个错误的结果,因为当您<code>shift</code>向下时,您正在与一个不存在的行进行比较:</p>
<pre><code>In[69]:
b.shift()
Out[69]:
0 NaN
1 NaN
2 NaN
3 4.0
dtype: float64
</code></pre>
<p>{{cd2>与第一行cd2}相比较。在</p>
<p>要解决第一行的误报,可以将结果切片以忽略第一行:</p>
<pre><code>In[70]:
( (b == b.shift()) | ( (b != b.shift()) & (b != b) ) )[1:]
Out[70]:
1 True
2 False
3 False
dtype: bool
</code></pre>
<p>至于它为什么被强制转换,<code>Pandas</code>试图将数据强制到一个兼容的numpy,这里选择float是因为<code>int</code>和{<cd1>}值,<code>None</code>和{<cd2>}不能用<code>int</code>来表示</p>
<p>要获得与示例中的<code>a</code>相同的结果,您应该将第一行重写为<code>False</code>,因为它总是失败的:</p>
<pre><code>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
</code></pre>