Byłem w stanie wyciąć pod-DataFrame z a Deedle DataFrame
na dwa sposoby:
a) Wyodrębnij wiersze za pomocą df.Rows.After
a następnie zrekonstruuj używając Frame.ofRows
b) Użyj Frame.filterRows
Jednak byłoby o wiele lepiej po prostu napisać df.[someDate..]
ale to generuje błąd. Zobacz poniższy kod.
Jaki jest najlepszy sposób na kopiowanie / aktualizowanie DataFrame przez wycinanie ciągłego podzbioru jego wierszy?
open Deedle
let dates =
[ DateTime(2013,1,1);
DateTime(2013,1,4);
DateTime(2013,1,8) ]
let values = [ 10.0; 20.0; 30.0 ]
let first = Series(dates, values)
let second = Series(dates, List.map (fun x -> x * 5.0) values)
let df1 = Frame(["first"; "second"], [first; second])
let someDate = DateTime(2013,1,5)
let df2 = Frame.ofRows (df1.Rows.After someDate)
// Ok, a one-row DataFrame
let f firstDate (dt: DateTime) (x: ObjectSeries<string>) = (dt > firstDate)
let df3 = Frame.filterRows (f someDate) df1
// Ok, a one-row DataFrame
let df4 = df1.[someDate..]
// error FS0039: The field, constructor or member "GetSlice" is not defined.
Odpowiedzi:
4 dla odpowiedzi № 1Możesz użyć składni podziału na df1.Rows
lub df1.Columns
. Nawet jeśli zachowują się jak seria dla większości rzeczy (w tym fakt, że możesz zadzwonić After
na nich), zwracają nową ramkę danych, gdy używa się ich poprzez cięcie.
Następujące powinny zrobić dokładnie to, czego potrzebujesz:
let df4 = df1.Rows.[someDate..]