def notna(self) -> 'Series': ''' Return a same-indexed, Boolean Series indicating which values are NaN or None. ''' values = np.logical_not(_isna(self.values)) values.flags.writeable = False return self.__class__(values, index=self._index)
def fillna(self, value) -> 'Series': '''Return a new Series after replacing NaN or None values with the supplied value. ''' sel = _isna(self.values) if not np.any(sel): return self if isinstance(value, np.ndarray): raise Exception('cannot assign an array to fillna') else: value_dtype = np.array(value).dtype assigned_dtype = _resolve_dtype(value_dtype, self.values.dtype) if self.values.dtype == assigned_dtype: assigned = self.values.copy() else: assigned = self.values.astype(assigned_dtype) assigned[sel] = value assigned.flags.writeable = False return self.__class__(assigned, index=self._index, name=self._name)
def isna(self) -> 'Series': ''' Return a same-indexed, Boolean Series indicating which values are NaN or None. ''' # consider returning self if not values.any()? values = _isna(self.values) values.flags.writeable = False return self.__class__(values, index=self._index)
def dropna(self) -> 'Series': ''' Return a new Series after removing values of NaN or None. ''' sel = np.logical_not(_isna(self.values)) if not np.any(sel): return self values = self.values[sel] values.flags.writeable = False return self.__class__(values, index=self._index.loc[sel])
def test_isna_array_b(self): a1 = np.array([[1, 2], [3, 4]]) a2 = np.array([[False, True, False], [False, True, False]]) a3 = np.array([['b', 'c', 'd'], ['b', 'c', 'd']]) a4 = np.array([[2.3, 3.2, np.nan], [2.3, 3.2, np.nan]]) a5 = np.array( [['test', 'test again', np.nan], ['test', 'test again', np.nan]], dtype=object) a6 = np.array([[2.3, 5.4, np.nan], [2.3, 5.4, np.nan]], dtype='float32') self.assertEqual(_isna(a1).tolist(), [[False, False], [False, False]]) self.assertEqual( _isna(a2).tolist(), [[False, False, False], [False, False, False]]) self.assertEqual( _isna(a3).tolist(), [[False, False, False], [False, False, False]]) self.assertEqual( _isna(a4).tolist(), [[False, False, True], [False, False, True]]) self.assertEqual( _isna(a5).tolist(), [[False, False, True], [False, False, True]]) self.assertEqual( _isna(a6).tolist(), [[False, False, True], [False, False, True]])
def dropna(self) -> 'Series': ''' Return a new Series after removing values of NaN or None. ''' # get positions that we want to keep sel = np.logical_not(_isna(self.values)) if not np.any(sel): return self.__class__(()) values = self.values[sel] values.flags.writeable = False return self.__class__(values, index=self._index.loc[sel], name=self._name)
def test_isna_array_a(self): a1 = np.array([1, 2, 3]) a2 = np.array([False, True, False]) a3 = np.array(['b', 'c', 'd']) a4 = np.array([2.3, 3.2]) a5 = np.array(['test', 'test again'], dtype='S') a6 = np.array([2.3, 5.4], dtype='float32') self.assertEqual(_isna(a1).tolist(), [False, False, False]) self.assertEqual(_isna(a2).tolist(), [False, False, False]) self.assertEqual(_isna(a3).tolist(), [False, False, False]) self.assertEqual(_isna(a4).tolist(), [False, False]) self.assertEqual(_isna(a5).tolist(), [False, False]) self.assertEqual(_isna(a6).tolist(), [False, False]) a1 = np.array([1, 2, 3, None]) a2 = np.array([False, True, False, None]) a3 = np.array(['b', 'c', 'd', None]) a4 = np.array([2.3, 3.2, None]) a5 = np.array(['test', 'test again', None]) a6 = np.array([2.3, 5.4, None]) self.assertEqual(_isna(a1).tolist(), [False, False, False, True]) self.assertEqual(_isna(a2).tolist(), [False, False, False, True]) self.assertEqual(_isna(a3).tolist(), [False, False, False, True]) self.assertEqual(_isna(a4).tolist(), [False, False, True]) self.assertEqual(_isna(a5).tolist(), [False, False, True]) self.assertEqual(_isna(a6).tolist(), [False, False, True]) a1 = np.array([1, 2, 3, np.nan]) a2 = np.array([False, True, False, np.nan]) a3 = np.array(['b', 'c', 'd', np.nan], dtype=object) a4 = np.array([2.3, 3.2, np.nan], dtype=object) a5 = np.array(['test', 'test again', np.nan], dtype=object) a6 = np.array([2.3, 5.4, np.nan], dtype='float32') self.assertEqual(_isna(a1).tolist(), [False, False, False, True]) self.assertEqual(_isna(a2).tolist(), [False, False, False, True]) self.assertEqual(_isna(a3).tolist(), [False, False, False, True]) self.assertEqual(_isna(a4).tolist(), [False, False, True]) self.assertEqual(_isna(a5).tolist(), [False, False, True]) self.assertEqual(_isna(a6).tolist(), [False, False, True])