Dataframe 如何在Julia中对DateTime或Time类型执行模运算?

Dataframe 如何在Julia中对DateTime或Time类型执行模运算?,dataframe,datetime,time,julia,modulo,Dataframe,Datetime,Time,Julia,Modulo,我在数据帧中有一些暂时的实验数据。我想将时间戳四舍五入到最接近的10秒,然后删除任何不是偶数分钟的行。除了下面的最后一步,我什么都有 df = DataFrame() df.Time = ["11:05:02", "11:05:23", "11:05:34", "11:05:42", "11:06:01"] df.Data = rand(5) df.Time = DateTime.(df.Time

我在数据帧中有一些暂时的实验数据。我想将时间戳四舍五入到最接近的10秒,然后删除任何不是偶数分钟的行。除了下面的最后一步,我什么都有

df = DataFrame()
df.Time = ["11:05:02", "11:05:23", "11:05:34", "11:05:42", "11:06:01"]
df.Data = rand(5)
df.Time = DateTime.(df.Time, DateFormat("H:M:S")) # I would rather just use Time type
df.Time = round.(df.Time, Second(10))             # but round is only defined for DateTime type

关于舍入,您始终可以定义一个简单的函数,例如:

function round10(t::Time)
    s= second(t) % 10
    s <=5 && return t - Second(s)
    return t + Second(10-s)
end

实际上,我想在提示符中说“整分钟”而不是“偶数分钟”,但基于您的解决方案,我认为这更容易:
filter!(:Time=>t->second(t)==0,df)
。谢谢
julia> filter!(:Time => time -> time % Minute(1) == 0, df)
ERROR: MethodError: no method matching rem(::DateTime, ::Minute)
function round10(t::Time)
    s= second(t) % 10
    s <=5 && return t - Second(s)
    return t + Second(10-s)
end
julia> df[minute.(round10.(df.Time)) .% 2 .== 0, :]
1×2 DataFrame
│ Row │ Time     │ Data     │
│     │ Time     │ Float64  │
├─────┼──────────┼──────────┤
│ 1   │ 11:06:01 │ 0.537324 │

julia> filter!(:Time => t -> minute(round10(t)) % 2 == 0, df)
1×2 DataFrame
│ Row │ Time     │ Data     │ 
│     │ Time     │ Float64  │ 
├─────┼──────────┼──────────┤
│ 1   │ 11:06:01 │ 0.537324 │