Lorsque vous créez Deedle frame à partir des lignes retournées par le fournisseur CSV en utilisant Frame.ofRecords
, il ne reçoit malheureusement pas automatiquement les noms de colonnes, car le fournisseur CSV les représente sous la forme d'un tuple - donc les noms sont juste Item1
, Item2
et ainsi de suite, correspondant Noms de propriété e du type de tuple .NET standard.
Pour résoudre ce problème, vous pouvez utiliser Frame.indexColsWith
qui vous permet de remplacer les noms de colonnes:
let headers = match csv.Headers with Some v -> v | _ -> failwith "No headers!"
let df =
csv.Rows
|> Frame.ofRecords
|> Frame.indexColsWith headers
df.SaveCsv(log_dirname+"/new_trades.csv")
Vous pouvez spécifier keyNames
si vous souhaitez inclure les touches de ligne - ce sont des chiffres que ordinales par défaut, dans lequel Dans le cas contraire, vous ne voulez probablement pas les inclure:
df.SaveCsv(log_dirname+"/new_trades.csv", includeRowKeys=false)
Si vous indexez vos données de telle sorte que, par exemple, la date est l'indice, vous pouvez utiliser:
df.SaveCsv(log_dirname+"/new_trades.csv", includeRowKeys=true,keyNames=["Date"])
Notez que le nom keyNames
suggère un peu fallacieuse que vous devez spécifier plusieurs noms - c'est seulement le cas lorsque vous avez des indices à plusieurs niveaux, mais c'est caractéristique de Deedle quelque peu étrange et rarement utilisée.
J'ai mis à jour votre question pour indiquer plus clairement que vous utilisez Deedle pour enregistrer un fichier CSV, et non le fournisseur de type Csv. – mydogisbox