O seguinte renomeia uma coluna em um dataframe Polars-Rust:
#![allow(unused_variables)]
use polars::prelude::*;
fn main() {
println!("Hello, world!");
let mut df = df! [
"names" => ["a", "b", "c"],
"values" => [1, 2, 3],
].unwrap();
println!("{:?}", df);
let new_name = <PlSmallStr>::from_str("letters");
let _ = df.rename("names", new_name);
println!("{:?}", df);
}
Suponha agora que o nome da primeira coluna seja desconhecido (por exemplo, o dataframe é lido de um arquivo csv/excel, onde não tem nome) e eu gostaria de renomeá-lo para uso futuro:
fn main() {
println!("Hello, world!");
let mut df = df! [
"names" => ["a", "b", "c"],
"values" => [1, 2, 3],
].unwrap();
println!("{:?}", df);
let old_name = df.get_column_names_str()[0];
// let old_name = df.get_column_names_str()[0].clone();
// let old_name = &mut df.get_column_names_str()[0].clone();
// let mut old_name = &mut df.get_column_names_str()[0].clone();
let new_name = <PlSmallStr>::from_str("letters");
let _ = df.rename(old_name, new_name);
println!("{:?}", df);
}
Isso resulta em um erro
error[E0502]: cannot borrow `df` as mutable because it is also borrowed as immutable
--> src/main.rs:32:13
|
27 | let old_name = df.get_column_names_str()[0];
| -- immutable borrow occurs here
...
32 | let _ = df.rename(old_name, new_name);
| ^^^------^^^^^^^^^^^^^^^^^^^^
| | |
| | immutable borrow later used by call
| mutable borrow occurs here
For more information about this error, try `rustc --explain E0502`.
error: could not compile `rename_col` (bin "rename_col") due to 1 previous error
Está mais ou menos claro por que o erro ocorre, mas não está claro como corrigi-lo...
As linhas comentadas mostram minhas várias tentativas malsucedidas de resolver esse problema.
Relacionado:
Em Rust, como renomear todas as colunas de um Polars Dataframe?
Como renomear nomes de colunas com a primeira linha em polars?