2016-03-06 39 views
2

如果使用.Rows.[rowIndex]操作得到rowFrame,则Deedle将返回。有时我知道这只包含float。如何将所有obj转换为float系列中的拍摄对象?F#deedle转换系列<string, obj>转换为Series <string,float>?

+1

这个问题可能很简单。但是这样的问题在python/pandas社区中得到了解答。无论如何,低估这一点是阻碍人们采用F#/ Deedle。 – tesla1060

+2

如果您知道所有元素都是浮动元素,您可以使用映射函数(在Deedle中,默认的'map'将跳过缺少的值,还有一个单独的函数'trymap',它可以处理异常)。你可以传递像'(fun x - > x:?> float)'这样的地图函数。 – jpe

+0

@jpe,我想你应该写这个评论作为答案;) –

回答

2

在Deedle系列是通用的,所以理想情况下应该可以立即获得浮动系列。但正如你为什么得到一系列对象的原因尚不清楚,你仍然可以通过映射一个适当的类型转换函数值转换为浮动:

#load @"..\packages\Deedle.1.2.4\Deedle.fsx" 

open Deedle 
open System 

// Let's prepare a sample series 
let keys = ["1";"2";"3"] 
let values = [1.1 :> Object;1.2 :> Object;1.3 :> Object] 
let series = Series(keys, values) 

// Now apply the map taking the Series<string,System.Object> series to Series<string,float> 
series |> Series.map (fun _ v -> v :?> float) 

// as @Foggy Finder pointed out, there is a convenience function to only map values 
series |> Series.mapValues (fun v -> v :?> float) 

// Alternatively, use the tryMap function that takes the Series<int,Object> series 
// to Series<int,TryValue<float>> 
series |> Series.tryMap (fun _ v -> v :?> float) 

的类型Series.map功能是(('a -> 'b -> 'c) -> Series<'a,'b> -> Series<'a,'c>) when 'a : equality。这意味着映射函数的第一个参数是我们忽略使用下划线的关键,因为它不需要进行类型转换。正如Foggy Finder指出的那样,隐藏键的便利功能Series.mapValues

+1

我会补充说有一个Series.mapValues –

相关问题