Deedle框架indexRowsDate不再对行进行排序?

时间:2015-04-07 12:36:24

标签: indexing f# dataframe deedle

我试图使用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失败。

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

这是新行为还是错误?

谢谢

1 个答案:

答案 0 :(得分:1)

这是设计:

  • ReadCsv函数按CSV文件中出现的顺序读取数据(对于Yahoo股票价格,最近的价格位于顶部)

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

据我所知,你发布的片段总是这样(但我可能会遗漏一些东西?)如果你想创建有序帧,你需要调用sortRowsByKeys(就像你做的那样)或者你正在阅读雅虎的数据,你可以使用Frame.rev