Rust中Polars DataFrame inner_join编译报错求助
Rust Polars inner_join 编译错误:
&str is not an iterator 问题原因
你使用的Polars 0.23.1版本中,DataFrame::inner_join方法的第三、第四个参数要求传入可迭代的列名集合(实现IntoIterator trait),用于支持多列连接场景。直接传入单个字符串切片"column_1"时,由于&str没有实现IntoIterator,因此触发编译错误。
解决方法
将单个列名包装为可迭代结构,比如数组引用或Vec:
修改连接代码行:
// 原错误代码 // let all_data = first_data.inner_join(second_data, "column_1", "column_1"); // 修改后代码 let all_data = first_data.inner_join(second_data, &["column_1"], &["column_1"])?;
同时注意:inner_join返回Result<DataFrame, PolarsError>,结合main函数的std::io::Result<()>返回类型,使用?传播错误比unwrap更规范(调试阶段也可继续用unwrap)。
完整修改后的代码
use polars::prelude::*; use std::fs::File; use std::path::PathBuf; use std::env; fn main() -> std::io::Result<()> { let mut root = env::current_dir().unwrap(); let file_1 = root.join("data_1.csv"); let file_2 = root.join("data_2.csv"); // 读取第一个文件(单列数据) let file = File::open(file_1).expect("无法打开文件"); let first_data = CsvReader::new(file) .has_header(false) .finish() .unwrap(); println!("{}", first_data); // 读取第二个文件(单列数据) let file = File::open(file_2).expect("无法打开文件"); let second_data = CsvReader::new(file) .has_header(false) .finish() .unwrap(); println!("{}", second_data); // 执行INNER JOIN let all_data = first_data.inner_join(second_data, &["column_1"], &["column_1"])?; println!("{}", all_data); Ok(()) }
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

