Elixir Explorer-DataFrame将字符串强制转换为时间



我尝试将Explorer.Series行从字符串转换为Time类型。

DataFrame.mutate函数不允许我转换为其他类型。我应该将此Series.transform与Series.cast合并吗?

df = Explorer.DataFrame.from_map(%{a: ["00:30:00", "01:00:00", "05:30:00"]})
transform_duration = fn duration ->
time = Time.from_iso8601!(duration)
time.hour + (time.minute / 60) + (time.second / 60*60)
end

DataFrame.mutate(df, a: Series.transform(s, fn x -> transform_duration.(x) end))

也许我的整个方法不好?

上面的代码片段返回给我这个错误:

** (ArgumentError) cannot parse "this " as time, reason: :invalid_format
(elixir 1.13.2) lib/calendar/time.ex:281: Time.from_iso8601!/2
(stdlib 3.17) erl_eval.erl:685: :erl_eval.do_apply/6
(stdlib 3.17) erl_eval.erl:446: :erl_eval.expr/5
(stdlib 3.17) erl_eval.erl:123: :erl_eval.exprs/5
(elixir 1.13.2) lib/enum.ex:1593: Enum."-map/2-lists^map/1-0-"/2
(explorer 0.1.0-dev) lib/explorer/polars_backend/series.ex:385: Explorer.PolarsBackend.Series.transform/2

一种解决方案是使用Explorer.Dataframe.put/3:

Explorer.DataFrame.put(df, "a", Explorer.Series.transform(df["a"], fn x -> transform_duration.(x) end))
#Explorer.DataFrame<
Polars[3 x 1]
a float [0.5, 1.0, 5.5]
>

最新更新