我有同样的问题:Pandas series.all()返回nan
In [88]: pd.Series([False, np.nan]).any()
Out[88]: nan
Run Code Online (Sandbox Code Playgroud)
在哪里:
In [84]: np.any([False, np.nan])
Out[84]: True
Run Code Online (Sandbox Code Playgroud)
并且:
In [99]: pd.DataFrame([False, np.nan]).any()
Out[99]:
0 False
dtype: bool
Run Code Online (Sandbox Code Playgroud)
我很好奇这三种类型的不同行为的解释是什么?
这里的区别与实现any不同的两种不同类型无关.事实上,文档pandas.Series.any和numpy.ndarray.any两者明确地说"参考numpy.any完整文档",因为它们都有效地调用numpy.any.
不同的是,在这两种情况下你有不同的dtypes.如果可能,从不同的数字类型隐式或显式地创建NumPy ndarray强制类型是相同的,所以你最终得到float64,而Pandas系列保持类型分开,这意味着你最终object.
如果dtype明确指定,您可以看到它们执行相同的操作:
>>> a = np.array([False, np.nan])
>>> a
array([ 0., nan])
>>> a.dtype
float64
>>> a.any()
True
>>> a = np.array([False, np.nan], dtype=object)
>>> a
array([False, nan], dtype=object)
>>> a.any()
nan
>>> p = pd.Series([False, np.nan])
>>> p
0 False
1 NaN
>>> p.dtype
dtype('O')
>>> p.any()
nan
>>> p = pd.Series([False, np.nan], dtype=np.float64)
>>> p
0 0
1 NaN
>>> p.any()
True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3237 次 |
| 最近记录: |