O código a seguir é executado:
fn main() {
let mut df = df! [
"names" => ["a", "b", "c", "d"],
"values" => [1, 2, 3, 4],
"floats" => [1.25, 2., 1., 0.5]
].unwrap();
// println!("{:?}", df);
let names_to_remove = Series::new("bad names".into(), ["c", "d"]);
let df1 = df
.clone()
.lazy()
.filter(col("names").is_in(lit(names_to_remove)).not())
.collect()
.unwrap();
println!("{:?}", df1);
}
Agora tento fazer a mesma coisa, mas o nome da coluna filtrada é alterado:
fn main() {
let mut df = df! [
"names" => ["a", "b", "c", "d"],
"values" => [1, 2, 3, 4],
"floats" => [1.25, 2., 1., 0.5]
].unwrap();
// println!("{:?}", df);
let old_name = &df.get_column_names_owned()[0]; // rename first column
let _ = df.rename(old_name, "all_names".into());
// println!("{:?}", df);
// println!("{:?}", df.column("all_names").unwrap());
let cols_to_remove = Series::new("bad names".into(), ["c", "d"]);
let df1 = df
.clone()
.lazy()
.filter(col("all_names").is_in(lit(cols_to_remove)).not())
.collect()
.unwrap();
println!("{:?}", df1);
}
Isso resulta em uma mensagem de erro:
thread 'main' panicked at src/main.rs:42:10:
called `Result::unwrap()` on an `Err` value: ColumnNotFound(ErrString("unable to find column \"all_names\"; valid columns: [\"names\", \"values\", \"floats\"]\n\nResolved plan until failure:\n\n\t---> FAILED HERE RESOLVING 'filter' <---\nDF [\"names\", \"values\", \"floats\"]; PROJECT */3 COLUMNS"))
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
A mensagem parece sugerir que o nome da primeira coluna não mudou, embora a impressão do dataframe ou mesmo da primeira coluna extraída pelo primeiro nome mostre que o nome realmente mudou.
Entretanto, usar o nome antigo da coluna também não funciona ( col("all_names")
--> col("names")
):
thread 'main' panicked at src/main.rs:43:10:
called `Result::unwrap()` on an `Err` value: ColumnNotFound(ErrString("\"names\" not found"))
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace