使用Deedle计算日期差值报错:重载减法运算符问题
解决Deedle中日期Series相减的重载错误
你遇到的问题是因为Deedle的Series类型默认没有为DateTime实现减法运算符,直接用-会触发重载错误。可以通过Series.map2方法逐元素计算两个日期的差值,具体步骤如下:
- 用
Series.map2对两个日期Series的对应元素执行减法操作,得到时间差(TimeSpan类型)的Series - 将新生成的Series作为列添加到原Frame中
修改后的完整代码:
let df = Frame.ReadCsv("someDateColumns.csv", hasHeaders=true, separators="|") let s1:Series<int,DateTime> = df.GetColumn<DateTime>("StartDate") let s2:Series<int,DateTime> = df.GetColumn<DateTime>("EndDate") // 计算日期差值 let s3 = Series.map2 (fun start end' -> end' - start) s1 s2 // 或者更简洁的写法 // let s3 = Series.map2 (-) s1 s2 // 将差值列添加到Frame df.AddColumn("DateDifference", s3)
补充说明
- 如果两个Series的索引不完全匹配,
Series.map2只会处理共同索引的元素,缺失索引对应的位置会标记为Missing,如果需要处理这种情况,可以指定joinStrategy参数(比如JoinStrategy.Inner只保留共同索引,JoinStrategy.Outer保留所有索引) - 计算得到的
s3是Series<int, TimeSpan>类型,你可以根据需求进一步转换为天数、小时数等数值类型,比如用Series.map (fun ts -> ts.TotalDays)得到总天数的Series
内容的提问来源于stack exchange,提问作者Jules
相关产品推荐
相关产品推荐

