键入错误从系列列表创建数据框

时间:2015-02-26 00:05:06

标签: deedle

这有效:

let df = Frame(["s1";"s2"],
         [ series["a"=>1;"b"=>2]; series["a"=>3;"b"=>4] ])

但如果我这样做:

let theSeries = [ series["a"=>1;"b"=>2]; series["a"=>3;"b"=>4] ]
let df2 = Frame(["s1";"s2"], theSeries)

我收到错误:

error FS0001: The type 'Series<string,int> list' is not compatible with the type 'seq<ISeries<'a>>'

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这有点微妙。当您将列表直接传递给构造函数时,F#会根据构造函数所需的类型(list<ISeries<_>>)推断列表的类型。

当您首先创建列表时,将从特定系列中推断出类型,并获得list<Series<int, float>>

您可以通过添加类型注释来解决此问题:

let theSeries : list<ISeries<_>> = [ series["a"=>1;"b"=>2]; series["a"=>3;"b"=>4] ]
let df2 = Frame(["s1";"s2"], theSeries)

或者您可以使用(可能更好)ofColumns函数:

[ "s1" => series["a"=>1;"b"=>2]
  "s2" => series["a"=>3;"b"=>4] ]
|> Frame.ofColumns