这基本上是我在这里的答案的内容重新排列:这里。
在尝试使用
考虑以下内容:
我想检查这些项目中哪些是空的。直接使用
使用
由于第二个值是
所以,解决方案是将其转换为Series,然后测试值。
类似的,另一种(虽然迂回)解决方案是预先将其转换为
我想象中,
在这里,
在尝试使用
pd.notnull
解决这个问题时,我遇到了一些奇怪的行为。考虑以下内容:
x = ('A4', nan)
我想检查这些项目中哪些是空的。直接使用
np.isnan
会抛出 TypeError (但我已经找到了解决方法)。使用
pd.notnull
不起作用。>>> pd.notnull(x)
True
它把元组看作一个单一的值(而不是值的可迭代对象)。此外,将其转换为列表然后进行测试也会给出错误的答案。
>>> pd.notnull(list(x))
array([ True, True])
由于第二个值是
nan
,所以我要寻找的结果应该是 [True, False]
。当您预先转换为序列时,最终会起作用:>>> pd.Series(x).notnull()
0 True
1 False
dtype: bool
所以,解决方案是将其转换为Series,然后测试值。
类似的,另一种(虽然迂回)解决方案是预先将其转换为
object
dtype的numpy数组,然后pd.notnull
或np.isnan
直接起作用:>>> pd.notnull(np.array(x, dtype=object))
Out[151]: array([True, False])
我想象中,
pd.notnull
在底层直接将 x
转换为字符串数组,将 NaN 渲染为字符串 "nan",因此它不再是一个 "null" 值。在这里,
pd.notnull
是否也在做同样的事情?还是底层发生了其他事情,我应该注意到吗?
注:
In [156]: pd.__version__
Out[156]: '0.22.0'
pandas
?在 v. 23.0 中,pd.notnull(list(x))
返回正确的结果:array([ True, False])
。 - Grigoriy Mikhalkinpandas 0.23.1
中测试 -x = ('A4', np.nan) print(pd.notnull(list(x)))
并返回[ True False]
。 - jezrael