Rust中如何在函数内修改Polars DataFrame并让调用者看到变更?
问题分析与解决
你的代码存在两个关键问题,直接导致了"cannot borrow as mutable"错误:
- 列引用类型不匹配:
days.column("date_string")返回的是不可变引用&Series,而rename方法需要可变引用&mut Series,因此无法调用该方法修改列名。 - 字符串语法错误:
"DATE-STRING)"包含一个多余的右括号,属于语法层面的错误。
修正后的代码如下:
use polars::prelude::*; fn main() { let mut days = df!( "date_string" => &["1900-01-01", "1900-01-02", "1900-01-03", "1900-01-04", "1900-01-05", "1900-01-06", "1900-01-07", "1900-01-09", "1900-01-10"]) .unwrap(); change(&mut days); println!("{:?}", days); } fn change(days: &mut DataFrame) { // 使用column_mut获取可变引用,同时修正字符串括号错误 days.column_mut("date_string").unwrap().rename("DATE-STRING"); }
关键修正点:
- 用
column_mut替代column:该方法返回Result<&mut Series, PolarsError>,能拿到列的可变引用,满足rename方法对可变借用的要求。 - 修正字符串语法错误:移除
"DATE-STRING)"中多余的右括号,改为合法的字符串"DATE-STRING"。
修改完成后,函数可以成功修改传入的DataFrame列名,main函数打印的结果会显示变更后的列名。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

