Deedle frame indexRowsDate 不再对行进行排序?

Deedle frame indexRowsDate no longer sorting the rows?

我试图使用 Deedle(从 github 20150407 下载)来测试数据框上的一些 windowInto 函数。但是我注意到以下行为:

#I "../../bin/"
#r "Deedle.dll"

open System
open System.Data
open System.Dynamic
open System.Collections.Generic
open Deedle


let df1 = Frame.ReadCsv(__SOURCE_DIRECTORY__ + "/data/MSFT.csv", inferRows=10)  
           |> Frame.take 5 |> Frame.indexRowsDate "Date" 
df1.Print();
let df2 = df1   |> Frame.sortRowsByKey
df2.Print(); 

                          Open  High  Low   Close Volume   Adj Close 
27/01/2012 12:00:00 AM -> 29.45 29.53 29.17 29.23 44187700 29.23     
26/01/2012 12:00:00 AM -> 29.61 29.70 29.40 29.50 49102800 29.50     
25/01/2012 12:00:00 AM -> 29.07 29.65 29.07 29.56 59231700 29.56     
24/01/2012 12:00:00 AM -> 29.47 29.57 29.18 29.34 51703300 29.34     
23/01/2012 12:00:00 AM -> 29.55 29.95 29.35 29.73 76078100 29.73     
                          Open  High  Low   Close Volume   Adj Close 
23/01/2012 12:00:00 AM -> 29.55 29.95 29.35 29.73 76078100 29.73     
24/01/2012 12:00:00 AM -> 29.47 29.57 29.18 29.34 51703300 29.34     
25/01/2012 12:00:00 AM -> 29.07 29.65 29.07 29.56 59231700 29.56     
26/01/2012 12:00:00 AM -> 29.61 29.70 29.40 29.50 49102800 29.50     
27/01/2012 12:00:00 AM -> 29.45 29.53 29.17 29.23 44187700 29.23     
val df1 : Frame<DateTime,string>
val df2 : Frame<DateTime,string>
val it : unit = ()

indexRowDate 之后的 dataFrame 的行不再按升序排序。这将导致任何基于索引的操作(如 windowInto)失败。

为了使其正常工作,需要对数据框进行排序。

这是新行为还是错误?

谢谢

这是设计使然:

  • ReadCsv 函数按照数据在 CSV 文件中出现的顺序读取数据(对于雅虎股票价格,最新的价格在顶部)

  • indexRowsDate 函数不会更改顺序 - 它只是用指定列中的值替换键。

据我所知,你发布的代码片段总是这样(但我可能遗漏了什么?)如果你想创建有序的框架,你需要调用 sortRowsByKeys(就像你所做的那样)或者,如果您正在从 Yahoo 读取数据,您可以只使用 Frame.rev.