def set_types(self, logical_types=None, semantic_tags=None, retain_index_tags=True): """Update the logical type and semantic tags for any columns names in the provided types dictionaries, updating the Woodwork typing information for the DataFrame. Args: logical_types (dict[str -> str], optional): A dictionary defining the new logical types for the specified columns. semantic_tags (dict[str -> str/list/set], optional): A dictionary defining the new semantic_tags for the specified columns. retain_index_tags (bool, optional): If True, will retain any index or time_index semantic tags set on the column. If False, will replace all semantic tags any time a column's semantic tags or logical type changes. Defaults to True. """ if self._schema is None: _raise_init_error() logical_types = logical_types or {} logical_types = { col_name: _parse_logical_type(ltype, col_name) for col_name, ltype in logical_types.items() } self._schema.set_types(logical_types=logical_types, semantic_tags=semantic_tags, retain_index_tags=retain_index_tags) # go through changed ltypes and update dtype if necessary for col_name, logical_type in logical_types.items(): series = self._dataframe[col_name] updated_series = _update_column_dtype(series, logical_type) if updated_series is not series: self._dataframe[col_name] = updated_series
def test_parse_logical_type_errors(): error = 'Must use an Ordinal instance with order values defined' with pytest.raises(TypeError, match=error): _parse_logical_type('Ordinal', 'col_name') with pytest.raises(TypeError, match=error): _parse_logical_type(Ordinal, 'col_name') error = "Invalid logical type specified for 'col_name'" with pytest.raises(TypeError, match=error): _parse_logical_type(int, 'col_name')
def test_parse_logical_type_errors(): error = "Invalid logical type specified for 'col_name'" with pytest.raises(TypeError, match=error): _parse_logical_type(int, "col_name")
def test_parse_logical_type(): assert isinstance(_parse_logical_type("Datetime", "col_name"), Datetime) assert isinstance(_parse_logical_type(Datetime, "col_name"), Datetime) ymd_format = Datetime(datetime_format="%Y-%m-%d") assert _parse_logical_type(ymd_format, "col_name") == ymd_format
def test_parse_logical_type(): assert _parse_logical_type('Datetime', 'col_name') == Datetime assert _parse_logical_type(Datetime, 'col_name') == Datetime ymd_format = Datetime(datetime_format='%Y-%m-%d') assert _parse_logical_type(ymd_format, 'col_name') == ymd_format