我的用例:我有一个带有野生时间戳(字符串)的列,我希望将它们解析为时间戳类型.
The docs提到ChunkedArray
是我的字符串的类型化容器.
然而,我无法完整地描绘这幅图景.
fn with_timestamps(mut df: DataFrame) -> Result<DataFrame, PolarsError> {
let column = df.column("myTime")?.clone(); // clone, just for a good measure ...
let ca = column.utf8()?; // ChunkedArray
// I think I want something like this:
let new_time = Series::new("newTime", ca.into_iter().map(|v: &str| 42).collect());
// 42 is not a timestamp,
// but maybe I can work on that from an integer
df.with_column(new_time);
df
}
除此之外,我需要找出.with_column()
个动作是否到位,我很难从文档中确定我应该迭代什么.是Series
,ChunkedArray
和Do I从新的ChunkedArray
或从迭代器I Can collect()
或其他任何东西构造新的Series
.
Edit个
我也找到了this answer个,经过一点努力,我想出了这个例子,在我的例子中很管用:
let df = df!("Fruit" => &["Apple", "Apple", "Pear"],
"Color" => &["Red", "Yellow", "Green"],
"Date" => &["02/21/2022 07:51:00 AM", "2/21/2022 07:51:00 AM", "2/21/2022 07:51:00 AM"])?;
let options = StrpTimeOptions {
fmt: Some("%-m/%-d/%Y %I:%M:%S %p".into()),
date_dtype: polars::datatypes::DataType::Datetime(TimeUnit::Milliseconds, None),
exact: true,
..Default::default()
};
let foo = df
.clone()
.lazy()
.with_columns([
col("Date")
.str()
.strptime(options)
.alias("parsed date")
])
.collect();
请注意这.lazy()
美元.如果没有它,Expr
(col("Foo").alias("bar"
)似乎不能直接使用(不是Series
,而Lazy API只需要一个表达式),而且我对Rust编译器消息的理解目前还不足以弄清楚为什么和什么才是惯用的方式.