diff --git a/packages/vaex-core/vaex/dataframe.py b/packages/vaex-core/vaex/dataframe.py index eebdb56904..4b7de7666b 100644 --- a/packages/vaex-core/vaex/dataframe.py +++ b/packages/vaex-core/vaex/dataframe.py @@ -3664,8 +3664,24 @@ def add_virtual_column(self, name, expression, unique=False): self._save_assign_expression(valid_name) self.signal_column_changed.emit(self, valid_name, "add") - def rename(self, name, new_name, unique=False): + def _renames(self, names, unique=False): """Renames a column or variable, and rewrite expressions such that they refer to the new name""" + columns = self.get_column_names() + ret = [] + for name, new_name in names.items(): + if name == new_name: + continue + if name not in columns: + continue + new_name = vaex.utils.find_valid_name(new_name, used=None if not unique else self.get_column_names(hidden=True)) + self._rename(name, new_name, rename_meta_data=True) + ret.append(new_name) + return ret + + def rename(self, name, new_name=None, unique=False): + """Renames a column or variable, and rewrite expressions such that they refer to the new name""" + if isinstance(name, dict): + return self._renames(name, unique=unique) if name == new_name: return new_name = vaex.utils.find_valid_name(new_name, used=None if not unique else self.get_column_names(hidden=True)) diff --git a/tests/rename_test.py b/tests/rename_test.py index 066369f7e0..4ccec6aa3a 100644 --- a/tests/rename_test.py +++ b/tests/rename_test.py @@ -1,5 +1,17 @@ from common import * + +def test_renames(df_local): + ds = df_local + new_columns = ds.rename({'x': 'x1', 'y': 'y1'}) + assert new_columns == ['x1', 'y1'] + current_columns = ds.get_column_names() + for column in new_columns: + assert column in current_columns + for column in ['x', 'y']: + assert column not in current_columns + + def test_rename(ds_filtered): ds = ds_filtered ds['r'] = ds.x