Methoderror:在Julia中对Dataframe使用sort()时,没有匹配的方法



我有一个excelfile,我将其读取到Dataframe中。

using DataFrames, XLSX
df = DataFrame(XLSX.readtable("Stocks/WIHL-Wihlborgs.xlsx", "PriceMonth")...)
│ Row │ Date       │ Openprice │ Highprice │ Lowprice │ Closeprice │ Volume   │
│     │ Any        │ Any       │ Any       │ Any      │ Any        │ Any      │
├─────┼────────────┼───────────┼───────────┼──────────┼────────────┼──────────┤
│ 1   │ 2020-12-23 │ 189.1     │ 189.7     │ 170.3    │ 181.5      │ 4170122  │
│ 2   │ 2020-11-30 │ 160.0     │ 191.6     │ 158.0    │ 189.1      │ 8006506  │
│ 3   │ 2020-10-30 │ 178.4     │ 184.3     │ 151.2    │ 160.6      │ 6760931  │
│ 4   │ 2020-09-30 │ 138.5     │ 178.8     │ 137.9    │ 177.5      │ 9005351  │
│ 5   │ 2020-08-31 │ 147.2     │ 152.1     │ 137.2    │ 138.3      │ 4865386  │
sort(df)

但是当我尝试在这个DateFrame上使用sort()函数时,我得到了LoadError: MethodError: no method matching isless(::String, ::Dates.Date)

我觉得这很奇怪,因为我在同一Excel文件中有另一个选项卡,其中我有价格/天,而且排序很好。我看到的唯一区别是,在Excel文件中,价格/月选项卡的日期字段为日期,价格/天选项卡的日期域为任意。但在DataFrame中,两个选项卡都将Date字段标记为Any。

我很难理解为什么价格/天选项卡适用于sort(),而价格/月选项卡不适用,相反,它给了我LoadError

将列更改为相应的数据类型应该可以解决此问题(推断类型(:

using DataFrames, XLSX
df = DataFrame(XLSX.readtable("./dat.xlsx", "Sheet1", infer_eltypes=true)..., )
#5×6 DataFrame
# Row │ Date        Openprice  Highprice  Lowprice  Closeprice  Volume  
#     │ Date        Any        Float64    Any       Float64     Int64   
#─────┼─────────────────────────────────────────────────────────────────
#   1 │ 2020-12-23  189.1          189.7  170.3          181.5  4170122
#   2 │ 2020-11-30  160            191.6  158            189.1  8006506
#   3 │ 2020-10-30  178.4          184.3  151.2          160.6  6760931
#   4 │ 2020-09-30  138.5          178.8  137.9          177.5  9005351
#   5 │ 2020-08-31  147.2          152.1  137.2          138.3  4865386

现在,对日期进行排序很好:

df[sortperm(df.Date),1:2]
#5×2 DataFrame
# Row │ Date        Openprice 
#     │ Date        Any       
#─────┼───────────────────────
#   1 │ 2020-08-31  147.2
#   2 │ 2020-09-30  138.5
#   3 │ 2020-10-30  178.4
#   4 │ 2020-11-30  160
#   5 │ 2020-12-23  189.1

也可以手动设置日期类型:

using Dates
df.Date = Dates.Date.(string.(df.Date), "yyyy-mm-dd")
#5-element Array{Date,1}:
# 2020-12-23
# 2020-11-30
# 2020-10-30
# 2020-09-30
# 2020-08-31

最新更新