Igo*_*vin 4 julia dataframes.jl
pandas有许多非常方便的实用程序用于操作日期时间索引。Julia 中有类似的功能吗?我还没有找到任何处理此类事情的教程,尽管它显然是可能的。
实用程序的一些示例pandas:
dti = pd.to_datetime(
["1/1/2018", np.datetime64("2018-01-01"),
datetime.datetime(2018, 1, 1)]
)
dti = pd.date_range("2018-01-01", periods=3, freq="H")
dti = dti.tz_localize("UTC")
dti.tz_convert("US/Pacific")
idx = pd.date_range("2018-01-01", periods=5, freq="H")
ts = pd.Series(range(len(idx)), index=idx)
ts.resample("2H").mean()
Run Code Online (Sandbox Code Playgroud)
Prz*_*fel 15
Julia 库的理念是“只做一件事,但要把它做好”,因此它的库的布局可能更符合 Unix(一组允许实现共同目标的小工具),而不是 Python 的。\n因此你有单独的库数据帧和日期的库:
\njulia> using Dates, DataFrames\nRun Code Online (Sandbox Code Playgroud)\n浏览一下教程中的一些示例:
\ndti = pd.to_datetime(\n ["1/1/2018", np.datetime64("2018-01-01"), datetime.datetime(2018, 1, 1)]\n)\nRun Code Online (Sandbox Code Playgroud)\njulia> DataFrame(dti=[Date("1/1/2018", "m/d/y"), Date("2018-01-01"), Date(2018,1,1)])\n3\xc3\x971 DataFrame\n Row \xe2\x94\x82 dti\n \xe2\x94\x82 Date\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 2018-01-01\n 2 \xe2\x94\x82 2018-01-01\n 3 \xe2\x94\x82 2018-01-01\nRun Code Online (Sandbox Code Playgroud)\ndti = pd.date_range("2018-01-01", periods=3, freq="H")\nRun Code Online (Sandbox Code Playgroud)\njulia> DateTime("2018-01-01") .+ Hour.(0:2)\n3-element Vector{DateTime}:\n 2018-01-01T00:00:00\n 2018-01-01T01:00:00\n 2018-01-01T02:00:00\nRun Code Online (Sandbox Code Playgroud)\ndti = dti.tz_localize("UTC")\n\ndti.tz_convert("US/Pacific")\nRun Code Online (Sandbox Code Playgroud)\n请注意,Julia 中有一个单独的时区库。另外"US/Pacific"是时区的旧名称。
julia> using TimeZones\n\njulia> dti = ZonedDateTime.(dti, tz"UTC")\n3-element Vector{ZonedDateTime}:\n 2018-01-01T00:00:00+00:00\n 2018-01-01T01:00:00+00:00\n 2018-01-01T02:00:00+00:00\n\njulia> julia> astimezone.(dti, TimeZone("US/Pacific", TimeZones.Class(:LEGACY)))\n3-element Vector{ZonedDateTime}:\n 2017-12-31T16:00:00-08:00\n 2017-12-31T17:00:00-08:00\n 2017-12-31T18:00:00-08:00\nRun Code Online (Sandbox Code Playgroud)\nidx = pd.date_range("2018-01-01", periods=5, freq="H")\nts = pd.Series(range(len(idx)), index=idx)\nts.resample("2H").mean()\nRun Code Online (Sandbox Code Playgroud)\n对于重采样或其他复杂的操作,您需要使用 split-apply-combine 模式(请参阅https://docs.juliahub.com/DataFrames/AR9oZ/1.3.1/man/split_apply_combine/)
\njulia> df = DataFrame(date=DateTime("2018-01-01") .+ Hour.(0:4), vals=1:5)\n5\xc3\x972 DataFrame\n Row \xe2\x94\x82 date vals\n \xe2\x94\x82 DateTime Int64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 2018-01-01T00:00:00 1\n 2 \xe2\x94\x82 2018-01-01T01:00:00 2\n 3 \xe2\x94\x82 2018-01-01T02:00:00 3\n 4 \xe2\x94\x82 2018-01-01T03:00:00 4\n 5 \xe2\x94\x82 2018-01-01T04:00:00 5\njulia> df.date2 = floor.(df.date, Hour(2));\n\njulia> using StatsBase\n\njulia> combine(groupby(df, :date2), :date2, :vals => mean => :vals_mean)\n5\xc3\x972 DataFrame\n Row \xe2\x94\x82 date2 vals_mean\n \xe2\x94\x82 DateTime Float64\n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n 1 \xe2\x94\x82 2018-01-01T00:00:00 1.5\n 2 \xe2\x94\x82 2018-01-01T00:00:00 1.5\n 3 \xe2\x94\x82 2018-01-01T02:00:00 3.5\n 4 \xe2\x94\x82 2018-01-01T02:00:00 3.5\n 5 \xe2\x94\x82 2018-01-01T04:00:00 5.0\nRun Code Online (Sandbox Code Playgroud)\n