- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 F#。我正在尝试转换 Map<string, seq<DateTime * float>>
到 Deedle 数据框 ( http://bluemountaincapital.github.io/Deedle/tutorial.html#creating )。
我准备了以下代码:
let folderFnct (aFrame:Frame) colName datesAndValues =
let newSerie = Series(Seq.map (fun x -> fst x) datesAndValues, Seq.map (fun y -> snd y) datesAndValues)
let newFrame = aFrame.Join([colName], [newSerie], kind=JoinKind.Inner)
newFrame
let mapToDeedleFrame myMap frame =
Map.fold ( fun s ticker datesAndValues -> folderFnct s ticker datesAndValues) frame myMap
mapToDeedleFrame
使用现有框架折叠 map 。文件夹功能folderFnct
:
<DateTime * float>
) 使其成为一个系列。问题在于:
let newFrame = aFrame.Join([colName], [newSerie], kind=JoinKind.Inner)
哪里:
The field, constructor or member 'Join' is not defined
我已经确定了问题的三个潜在原因:
aFrame.Join
没有定义的?我尝试明确指定 aFrame
的类型mapToDeedleFrame
一个空框架?folderFnct
中进行模式匹配吗?针对 aFrame
的情况是空的吗?非常感谢!
编辑 1
根据 Tomas 的建议,这就是我目前所做的。
let folderFnct (aFrame:Frame<'a, 'b>) columnName (seqOfTuples: seq<'a*'b>) =
let newSerie = Series(Seq.map (fun x -> fst x) seqOfTuples, Seq.map (fun y -> snd y) seqOfTuples)
let otherFrame = Frame([columnName], [newSerie])
let newFrame = aFrame.Join((otherFrame), kind=JoinKind.Inner)
newFrame
let mapToDeedleFrame myMap frame =
Map.fold ( fun state k vals -> folderFnct state k vals) frame myMap
缺少的最后一步是:如何快速将空框架(可能避免创建虚拟框架)传递给 mapToDeedleFrame
?我试过[]
如
let frame = mapToDeedleFrame mapTS []
这可能是个愚蠢的问题,但我是 F# 的新手,我想知道是否有 Empty
语言中内置的类型。
跟进问题
在我阅读的源文件中(https://github.com/BlueMountainCapital/Deedle/blob/master/src/Deedle/Frame.fs):
member frame.Join<'V>(colKey, series:Series<'TRowKey, 'V>, kind, lookup) =
let otherFrame = Frame([colKey], [series])
frame.Join(otherFrame, kind, lookup)
在屏幕弹出的功能描述中:
从上图我猜想Frame的类型和colKey是一样的,而据我了解,colKey只是从serie加入join后的dataframe列的key。作为一个完全的菜鸟,我很困惑..
编辑 2
我重写了代码:
let seriesListMapper (colName:string, series:Series<'a, 'b>) =
[colName => series] |> frame
let frameListReducer (accFrame: Frame<'a, 'b>) (aFrame: Frame<'a, 'b>) =
accFrame.Join(aFrame, kind=JoinKind.Outer)
let seriesListToFrame (seriesList: List<string * Series<'a, 'b>>) =
seriesList |> List.map (fun elem -> seriesListMapper elem) |> List.reduce(fun acc elem -> frameListReducer acc elem)
问题在于:
let frame = seriesListToFrame seriesList
返回框架作为框架,而 seriesList 是 (string *Series<DateTime, float>) list
我认为问题在于:
let seriesListMapper (colName:string, series:Series<'a, 'b>) =
[colName => series] |> frame
事实上seriesListMapper
表示为
seriesListMapper: colName:string * series:Series<'a, 'b> -> Frame<'a, string>
我不明白这些值是如何以及为什么转换为 string
的来自 float
.
一个有趣的事情是用 frame.Format()
绘制框架实际上确认数据看起来是正确的。就是这种对 string
的“奇怪”转换.
最佳答案
在 folderFnct
的类型注解中, 你有 aFrame:Frame
.但是,表示数据框的类型是具有两个类型参数的泛型类型(分别表示行和列的索引类型),因此注释应为 aFrame:Frame<_, _>
.
另一种向框架添加系列的方法是使用变异操作:
aFrame.AddSeries(colName, newSeries)
但是,这只支持左连接(数据框只能通过添加新系列来改变,但不能改变索引)。但是,您可以使用这种方法,然后在构建框架后从框架中删除所有缺失值。
编辑:回答关于泛型类型的问题:
Series<K, V>
表示键类型为 K
的系列包含 V
类型的值(例如,具有普通索引观测值的系列将有 K=int
和 V=float
)
Frame<R, C>
表示包含异构数据(每列的类型可能不同)的帧,其中行由 R
索引和列由 C
索引.对于普通索引框架 R=int
通常,您的列将被命名为 C=string
(但你也可以有其他索引)
关于dictionary - 映射到 Deedle 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19795949/
我是 F# 的新手,将其视为 Matlab 的替代品。 引用 this question ,如何创建一个空的 Serie 和一个空的 Frame。 如果我没有错过它,为什么图书馆里没有设计一个空的 S
假设我有一个如下的框架, type Person = { Name:string; Age:int; Comp1:float; Comp2:float } let peopleRecds =
我有一个系统中发生的事件列表。我的目标是获取事件列表并创建该系列的滑动窗口以确定事件发生率。事件从该问题范围之外的应用程序加载到事件列表中。 因为系统可以同时从多个来源接收事件,所以一些事件发生时间戳
如何规范化框架中的数据? 我试过这种方法,但没有用 let iris = Frame.ReadCsv("./iris.csv") let keys = iris.ColumnKeys |> Seq
我有一张 table Month Cluster Year ActualAmount TargetedAmount 1 1 2015 100 200
是否有一种简洁实用的方法来重命名 Deedle 数据框的列 f ? f.RenameColumns(...)是可用的,但会改变它所应用的数据框,因此使重命名操作幂等有点痛苦。我有类似 f.Rename
我想返回每个值,包括某个键。 虽然我可以生成每个这样的键并将它们全部放入 Get 中,但我怀疑这会低效地搜索每个键的值。 受到 this 答案的启发,我想出了以下内容 let getAllUpTo k
我有以下代码: let mychart = frame.GetAllSeries() |> Seq.iter(fun key value -> Chart.Line(value, Name=key)
据我所知,Deedle 框架仅按索引排序。有什么方法可以应用自定义排序函数或按给定系列排序(并定义升序/降序)? 最佳答案 坚持使用 Frame 类型的“标准”框架(整数的行索引和字符串的列名)很容易
我已将 csv 文件加载到 Frame,deedle 自动将一列推断为 decimal, whichi 实际上应该是 int。 我已经使用下面的行来转换为正确的类型, df?ColumnName ("
据我所知,Deedle 框架仅按索引排序。有什么方法可以应用自定义排序函数或按给定系列排序(并定义升序/降序)? 最佳答案 坚持使用 Frame 类型的“标准”框架(整数的行索引和字符串的列名)很容易
我有一个 fsharp 中的 Deedle 框架,有 45 列,其中每列都包含 float 。我想通过对原始框架中的每个条目应用转换来创建一个新框架。转换的简单函数如下: let minusLogOf
我正在学习 F#。我正在尝试转换 Map>到 Deedle 数据框 ( http://bluemountaincapital.github.io/Deedle/tutorial.html#creati
我想在我的数据框中概述一个系列,比如 Pandas 的唯一值计数。不知道有没有内置函数。 到目前为止,我已经完成了一个函数来获取不同功能的数量。我可以设法完成这项工作,我的问题仅与内置功能有关。 le
合并具有重叠行的两个 deedle 框架的最佳方法是什么?不过,我想保持行的唯一性。据我了解,merge() 不允许重叠行。 最佳答案 如果行键只是序数并且没有任何意义,那么您可能只想用新的序号索引替
我怎样才能实现 this在 Deedle . Pandas :df['Name'] = 'abc' Deedle:df?Name = "abc" 不起作用 - 它需要一个系列。 最佳答案 给定一个包含
我有一个 deedle 数据框,称为 df,其中一列名为 TimeSpent . 我想保留值为 TimeSpent 的行大于特定的 TimeSpan(例如 30 分钟)。我只能设法保留具有特定 Tim
我是 C#/F# 的新手。演示如何使用 C# 中的 Deedle 按组聚合数据的在线资源非常有限。 F# 格式不能直接应用于 C#。 数据是 Titanic.csv,来自这里: https://for
在 deedle 框架中更改列顺序的最佳方法是什么?例如,如果我有一个包含 height、Name 和 phone 列的 deedle frame df,但我需要它按顺序 Name、phone 和 h
我有一个带有选举数据的 Deedle 系列,例如: "Party A", 304 "Party B", 25 "Party C", 570 .... "Party Y",
我是一名优秀的程序员,十分优秀!