我想找出导致此错误的重复数据在哪里,但是怎么办?
using DataFrames, TimeSeries
df = DataFrame(timestamp=[Date(2019, 12, 25), Date(2020,1,1), Date(2019, 12, 25)], V=[3, 6, 9])
TimeArray(df)
错误消息
ERROR: UndefKeywordError: keyword argument timestamp not assigned
Stacktrace:
[1] TimeArray(::DataFrame) at /home/dlin/.julia/packages/TimeSeries/8Z5Is/src/tables.jl:61
[2] top-level scope at REPL[11]:1
预期输出可能类似于
│ Row │ timestamp │ V │
│ │ Date │ Int64 │
├─────┼────────────┼───────┤
│ 1 │ 2019-12-25 │ 3 │
│ 3 │ 2019-12-25 │ 9 │
答案 0 :(得分:0)
删除重复项,然后将DataFrame
传递给TimeArray
:
julia> TimeArray(aggregate(df, :timestamp, minimum, sort=true), timestamp=:timestamp)
2×1 TimeArray{Int64,1,Date,Array{Int64,1}} 2019-12-25 to 2020-01-01
│ │ V_minimum │
├────────────┼───────────┤
│ 2019-12-25 │ 3 │
│ 2020-01-01 │ 6 │
如果您有DataFrame
,并且只想标识重复的日期值,请使用nonunique
函数。
julia> nonunique(df,:timestamp)
3-element Array{Bool,1}:
0
0
1
如果只希望日期唯一的行:
julia> unique(df,:timestamp)
2×2 DataFrame
│ Row │ timestamp │ V │
│ │ Date │ Int64 │
├─────┼────────────┼───────┤
│ 1 │ 2019-12-25 │ 3 │
│ 2 │ 2020-01-01 │ 6 │
答案 1 :(得分:0)
通过@Przemyslaw Szufel的答案,我找到了查找内容的方法,但它仍然不完美,它不能显示原始行索引,而只能显示第一个非唯一内容。
julia> v=nonunique(df,1)
8-element Array{Bool,1}:
0
0
1
0
0
0
1
1
julia> f=findfirst(v)
3
julia> df[df.Column1 .== df.Column1[f],:]
2×2 DataFrame
│ Row │ Column1 │ Column2 │
│ │ Date │ Int64 │
├─────┼────────────┼─────────┤
│ 1 │ 2019-12-25 │ 3 │
│ 2 │ 2019-12-25 │ 9 │
顺便说一句,在检查timearray.jl的源代码后,我发现“ ArgumentError:时间戳必须严格单调”消息不仅是单调的,而且还是“排序的”消息。