Skip to content

Commit fab7e2e

Browse files
committed
refactor: rename to rename
1 parent cdec202 commit fab7e2e

File tree

3 files changed

+29
-10
lines changed

3 files changed

+29
-10
lines changed

python/datafusion/dataframe.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,9 @@ def with_column(self, name: str, expr: Expr) -> DataFrame:
160160
"""
161161
return DataFrame(self.df.with_column(name, expr.expr))
162162

163+
@deprecated(
164+
"with_column_renamed() is deprecated. Use :py:meth:`~DataFrame.rename` instead"
165+
)
163166
def with_column_renamed(self, old_name: str, new_name: str) -> DataFrame:
164167
r"""Rename one column by applying a new projection.
165168
@@ -175,7 +178,23 @@ def with_column_renamed(self, old_name: str, new_name: str) -> DataFrame:
175178
Returns:
176179
DataFrame with the column renamed.
177180
"""
178-
return DataFrame(self.df.with_column_renamed(old_name, new_name))
181+
return DataFrame(self.df.rename({old_name: new_name}))
182+
183+
def rename(self, mapping: dict[str, str]) -> DataFrame:
184+
r"""Rename one or multiple columns by applying a new projection.
185+
186+
This is a no-op if the column to be renamed does not exist.
187+
188+
The method supports case sensitive rename with wrapping column name
189+
into one the following symbols (" or ' or \`).
190+
191+
Args:
192+
mapping (dict[str, str]): mapping of old (key) to new (value) names
193+
194+
Returns:
195+
DataFrame with one or multiple columns renamed.
196+
"""
197+
return DataFrame(self.df.rename(mapping))
179198

180199
def aggregate(
181200
self, group_by: list[Expr] | Expr, aggs: list[Expr] | Expr

python/tests/test_dataframe.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,8 @@ def test_with_column(df):
205205
assert result.column(2) == pa.array([5, 7, 9])
206206

207207

208-
def test_with_column_renamed(df):
209-
df = df.with_column("c", column("a") + column("b")).with_column_renamed("c", "sum")
208+
def test_rename(df):
209+
df = df.with_column("c", column("a") + column("b")).rename({"c":"sum"})
210210

211211
result = df.collect()[0]
212212

src/dataframe.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
// specific language governing permissions and limitations
1616
// under the License.
1717

18+
use std::collections::HashMap;
1819
use std::ffi::CString;
1920
use std::sync::Arc;
2021

@@ -180,14 +181,13 @@ impl PyDataFrame {
180181
Ok(Self::new(df))
181182
}
182183

183-
/// Rename one column by applying a new projection. This is a no-op if the column to be
184+
/// Rename single or multiple columns by applying a new projection. This is a no-op if the column to be
184185
/// renamed does not exist.
185-
fn with_column_renamed(&self, old_name: &str, new_name: &str) -> PyResult<Self> {
186-
let df = self
187-
.df
188-
.as_ref()
189-
.clone()
190-
.with_column_renamed(old_name, new_name)?;
186+
fn rename(&self, mapping: HashMap<String, String>) -> PyResult<Self> {
187+
let mut df = self.df.as_ref().clone();
188+
for (old_name, new_name) in mapping.iter() {
189+
df = df.with_column_renamed(old_name, new_name)?
190+
}
191191
Ok(Self::new(df))
192192
}
193193

0 commit comments

Comments
 (0)