Rust Polars - 从 df.column 获取结构系列而不是 '&' 引用
Rust Polars - get a struct Series from df.column instead of an '&' reference
我正在构建一个从 Raku NativeCall 到 Rust Polars 的接口,以获得酷炫的 Arrow2 性能提升。在高层次上,我想使用 Polars 结构,例如 DataFrame 和 Series 作为匹配容器的属性。所以要做 df.column
我想要这样的东西...
use polars::prelude::*;//{CsvReader, DataType, Field, Schema, DataFrame,};
use polars::prelude::{Result as PolarResult};
use polars::frame::DataFrame;
use polars::datatypes::DataType;
pub struct DataFrameC {
df: DataFrame,
}
impl DataFrameC {
fn new() -> DataFrameC {
DataFrameC {
df: DataFrame::default(),
}
}
fn column(&self, string: String) -> Series {
//let colin = self.df.column(&string).unwrap().head(Some(23));
let colin = self.df.column(&string).unwrap()
println!{"{}", colin};
colin
}
}
(Series 的类似方法 - 因此完成此 fn 的下一步是制作 Series::new()
然后 se.set(colin)
)
但是 - 我不知道如何取消对 Polars 系列的引用以及对普通系列的引用(我已经尝试过 .Deref() 和 .from_ptr() 但这些方法不存在)。
我发现 Series.head() 确实 return 一个 Series 结构 --- 所以 // 行按预期工作(但不是整个 Series!)
我不断收到此错误:
error[E0308]: mismatched types
--> src/lib.rs:92:9
|
88 | fn column(&self, string: String) -> Series {
| ------ expected `polars::prelude::Series` because of return type
...
92 | colin
| ^^^^^ expected struct `polars::prelude::Series`, found `&polars::prelude::Series`
For more information about this error, try `rustc --explain E0308`.
error: could not compile `dan` due to previous error
是否有执行此取消引用操作的成语?
非常感谢任何建议!
您不能将 &Series
解引用为 Series
,因为 Series
不是 Copy
。您从 self.df.column(&string).unwrap()
获得的 &Series
归 DataFrame
所有。
要return一个Series
,你必须克隆它。别担心它是一个超级便宜的克隆,因为 Series
只不过是一个 Arc<ChunkedArray>
,所以克隆只做一个原子引用计数操作。
我正在构建一个从 Raku NativeCall 到 Rust Polars 的接口,以获得酷炫的 Arrow2 性能提升。在高层次上,我想使用 Polars 结构,例如 DataFrame 和 Series 作为匹配容器的属性。所以要做 df.column
我想要这样的东西...
use polars::prelude::*;//{CsvReader, DataType, Field, Schema, DataFrame,};
use polars::prelude::{Result as PolarResult};
use polars::frame::DataFrame;
use polars::datatypes::DataType;
pub struct DataFrameC {
df: DataFrame,
}
impl DataFrameC {
fn new() -> DataFrameC {
DataFrameC {
df: DataFrame::default(),
}
}
fn column(&self, string: String) -> Series {
//let colin = self.df.column(&string).unwrap().head(Some(23));
let colin = self.df.column(&string).unwrap()
println!{"{}", colin};
colin
}
}
(Series 的类似方法 - 因此完成此 fn 的下一步是制作 Series::new()
然后 se.set(colin)
)
但是 - 我不知道如何取消对 Polars 系列的引用以及对普通系列的引用(我已经尝试过 .Deref() 和 .from_ptr() 但这些方法不存在)。
我发现 Series.head() 确实 return 一个 Series 结构 --- 所以 // 行按预期工作(但不是整个 Series!)
我不断收到此错误:
error[E0308]: mismatched types
--> src/lib.rs:92:9
|
88 | fn column(&self, string: String) -> Series {
| ------ expected `polars::prelude::Series` because of return type
...
92 | colin
| ^^^^^ expected struct `polars::prelude::Series`, found `&polars::prelude::Series`
For more information about this error, try `rustc --explain E0308`.
error: could not compile `dan` due to previous error
是否有执行此取消引用操作的成语?
非常感谢任何建议!
您不能将 &Series
解引用为 Series
,因为 Series
不是 Copy
。您从 self.df.column(&string).unwrap()
获得的 &Series
归 DataFrame
所有。
要return一个Series
,你必须克隆它。别担心它是一个超级便宜的克隆,因为 Series
只不过是一个 Arc<ChunkedArray>
,所以克隆只做一个原子引用计数操作。