def _possibly_convert_objects(values, convert_dates=True, convert_numeric=True, convert_timedeltas=True, copy=True): """ if we have an object dtype, try to coerce dates and/or numbers """ # if we have passed in a list or scalar if isinstance(values, (list, tuple)): values = np.array(values, dtype=np.object_) if not hasattr(values, "dtype"): values = np.array([values], dtype=np.object_) # convert dates if convert_dates and values.dtype == np.object_: # we take an aggressive stance and convert to datetime64[ns] if convert_dates == "coerce": new_values = _possibly_cast_to_datetime(values, "M8[ns]", errors="coerce") # if we are all nans then leave me alone if not isnull(new_values).all(): values = new_values else: values = lib.maybe_convert_objects(values, convert_datetime=convert_dates) # convert timedeltas if convert_timedeltas and values.dtype == np.object_: if convert_timedeltas == "coerce": from pandas.tseries.timedeltas import to_timedelta new_values = to_timedelta(values, coerce=True) # if we are all nans then leave me alone if not isnull(new_values).all(): values = new_values else: values = lib.maybe_convert_objects(values, convert_timedelta=convert_timedeltas) # convert to numeric if values.dtype == np.object_: if convert_numeric: try: new_values = lib.maybe_convert_numeric(values, set(), coerce_numeric=True) # if we are all nans then leave me alone if not isnull(new_values).all(): values = new_values except: pass else: # soft-conversion values = lib.maybe_convert_objects(values) values = values.copy() if copy else values return values
def _setitem_with_indexer(self, indexer, value): from pandas.core.frame import DataFrame, Series # also has the side effect of consolidating in-place # mmm, spaghetti if self.obj._is_mixed_type: if not isinstance(indexer, tuple): indexer = self._tuplify(indexer) if isinstance(value, Series): value = self._align_series(indexer, value) het_axis = self.obj._het_axis het_idx = indexer[het_axis] if isinstance(het_idx, (int, long)): het_idx = [het_idx] plane_indexer = indexer[:het_axis] + indexer[het_axis + 1:] item_labels = self.obj._get_axis(het_axis) if isinstance(value, (np.ndarray, DataFrame)) and value.ndim > 1: raise ValueError('Setting mixed-type DataFrames with ' 'array/DataFrame pieces not yet supported') try: for item in item_labels[het_idx]: data = self.obj[item] values = data.values if np.prod(values.shape): value = com._possibly_cast_to_datetime( value, getattr(data, 'dtype', None)) values[plane_indexer] = value except ValueError: for item, v in zip(item_labels[het_idx], value): data = self.obj[item] values = data.values if np.prod(values.shape): values[plane_indexer] = v else: if isinstance(indexer, tuple): indexer = _maybe_convert_ix(*indexer) if isinstance(value, Series): value = self._align_series(indexer, value) if isinstance(value, DataFrame): value = self._align_frame(indexer, value) # 2096 values = self.obj.values if np.prod(values.shape): values[indexer] = value
def _possibly_convert_objects(values, convert_dates=True, convert_numeric=True, convert_timedeltas=True, copy=True): """ if we have an object dtype, try to coerce dates and/or numbers """ # if we have passed in a list or scalar if isinstance(values, (list, tuple)): values = np.array(values, dtype=np.object_) if not hasattr(values, 'dtype'): values = np.array([values], dtype=np.object_) # convert dates if convert_dates and values.dtype == np.object_: # we take an aggressive stance and convert to datetime64[ns] if convert_dates == 'coerce': new_values = _possibly_cast_to_datetime(values, 'M8[ns]', errors='coerce') # if we are all nans then leave me alone if not isnull(new_values).all(): values = new_values else: values = lib.maybe_convert_objects(values, convert_datetime=convert_dates) # convert timedeltas if convert_timedeltas and values.dtype == np.object_: if convert_timedeltas == 'coerce': from pandas.tseries.timedeltas import to_timedelta new_values = to_timedelta(values, coerce=True) # if we are all nans then leave me alone if not isnull(new_values).all(): values = new_values else: values = lib.maybe_convert_objects( values, convert_timedelta=convert_timedeltas) # convert to numeric if values.dtype == np.object_: if convert_numeric: try: new_values = lib.maybe_convert_numeric(values, set(), coerce_numeric=True) # if we are all nans then leave me alone if not isnull(new_values).all(): values = new_values except: pass else: # soft-conversion values = lib.maybe_convert_objects(values) values = values.copy() if copy else values return values