Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 将嵌套字典转换为Deedle框架_F#_Deedle - Fatal编程技术网

F# 将嵌套字典转换为Deedle框架

F# 将嵌套字典转换为Deedle框架,f#,deedle,F#,Deedle,嵌套字典包含以下数据:{names,{dates,prices} 结构是这样的: type Dict<'T, 'U> = System.Collections.Generic.Dictionary<'T, 'U> let masterDict = Dict<string, Dict<Datetime, float>> () 我正在尝试将上面的数据完全连接到一个Deedle框架中,如下所示: Corn Future Wh

嵌套字典包含以下数据:{names,{dates,prices}

结构是这样的:

type Dict<'T, 'U> = System.Collections.Generic.Dictionary<'T, 'U>
let masterDict = Dict<string, Dict<Datetime, float>> ()
我正在尝试将上面的数据完全连接到一个Deedle框架中,如下所示:

            Corn Future   Wheat Future
2009-09-01  316.69       214.4
2009-09-02  316.09       223.86
2009-09-03  316.33       234.11
2009-09-04  NaN          224.62           // in case a point is not available

迪德尔的技术对我来说还是陌生的。任何帮助都将不胜感激。

不确定您将加入什么,但您可以转换:

let frame = 
    masterDict
    |> Seq.map(fun kv -> kv.Key, kv.Value 
                                 |> Seq.map(fun nkv -> nkv.Key, nkv.Value)
                                 |> Series.ofObservations)
    |> Frame.ofColumns

frame.Format() |> printfn "%s"
然后你得到:

                      Corn Future Wheat Future
01.09.2009 0:00:00 -> 316,69      214,4
02.09.2009 0:00:00 -> 316,09      223,86
03.09.2009 0:00:00 -> 316,33      234,11
04.09.2009 0:00:00 -> <missing>   224,62
玉米未来小麦未来
01.09.2009 0:00:00 -> 316,69      214,4
02.09.2009 0:00:00 -> 316,09      223,86
03.09.2009 0:00:00 -> 316,33      234,11
04.09.2009 0:00:00 ->    224,62

不确定要加入什么,但您可以转换:

let frame = 
    masterDict
    |> Seq.map(fun kv -> kv.Key, kv.Value 
                                 |> Seq.map(fun nkv -> nkv.Key, nkv.Value)
                                 |> Series.ofObservations)
    |> Frame.ofColumns

frame.Format() |> printfn "%s"
然后你得到:

                      Corn Future Wheat Future
01.09.2009 0:00:00 -> 316,69      214,4
02.09.2009 0:00:00 -> 316,09      223,86
03.09.2009 0:00:00 -> 316,33      234,11
04.09.2009 0:00:00 -> <missing>   224,62
玉米未来小麦未来
01.09.2009 0:00:00 -> 316,69      214,4
02.09.2009 0:00:00 -> 316,09      223,86
03.09.2009 0:00:00 -> 316,33      234,11
04.09.2009 0:00:00 ->    224,62

Deedle库中有一些扩展方法(主要是为了使它对C#也很友好),它们使用的是
KeyValuePair
,而不是元组(这是F#的默认值)

因此,您应该能够简化Foggy Finder发布的答案(假设顶部有
open Deedle
):


Deedle库中有一些扩展方法(主要是为了使它对C#也很友好),它们使用
KeyValuePair
,而不是元组(这是F#的默认值)

因此,您应该能够简化Foggy Finder发布的答案(假设顶部有
open Deedle
):


我写了答案,但对我来说似乎有点难看。您需要使用别名(Dict)?您有机会展示如何填写masterDict吗?我只是认为这样做比较容易。正如Foggy所说,您可以使用
dict
功能创建字典。不需要类型别名。我将切换到使用dict,但我不知道还有什么更好的方法。以上词典是查询彭博api的结果。我把C#示例翻译成F#。我写了答案,但对我来说,它似乎有点难看。您需要使用别名(Dict)?您有机会展示如何填写masterDict吗?我只是认为这样做比较容易。正如Foggy所说,您可以使用
dict
功能创建字典。不需要类型别名。我将切换到使用dict,但我不知道还有什么更好的方法。以上词典是查询彭博api的结果。我把C的例子翻译成F。