1

私は次の場合と同じ問題を抱えています: Pandas series.all() returns nan

In [88]: pd.Series([False, np.nan]).any()
Out[88]: nan

一方:

In [84]: np.any([False, np.nan]) 
Out[84]: True

また:

In [99]: pd.DataFrame([False, np.nan]).any()
Out[99]: 
0    False
dtype: bool

3 つのタイプの異なる動作の説明が何だったのか興味がありました。

4

1 に答える 1

5

ここでの違いは、2 つの異なる型の実装方法とは関係ありませんany。実際、pandas.Series.anyとの両方のドキュメントでは、 「完全なドキュメントについては をnumpy.ndarray.any参照してください」と明示的に述べられています。numpy.anynumpy.any

違いは、2 つのケースで dtype が異なることです。異なる数値型から 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
于 2013-11-12T05:00:52.310 に答える