2017-03-20 1 views
3

Frame.denseCols의 Visual Studio 2017 빠른 정보 툴팁에 "누락 된 값이 포함 된 열은 에있는 모든 문자가 행으로 건너 뜁니다."라고 표시됩니다. 다음의 예는 달리 제안 할 것 같다Frame.denseCols에 버그가 있습니까?

let dateRange (first:System.DateTime) count frac = 
    seq {for i in 0..(count - 1) -> first.AddDays(float i + frac)} 

let fifth = Series(dateRange (DateTime(2013,1,1)) 10 0.0, rand 10) 
let sixth = Series(dateRange (DateTime(2013,1,1)) 5 0.0, [10.0; 20.0; 30.0; 40.0; 50.0]) 
let dfR10 = Frame(["fifth"; "sixth"], [fifth; sixth]) 

let sR1 = 
    dfR10 
    |> Frame.denseCols 
sR1.Keys 
// val it : seq<string> = seq ["fifth"; "sixth"] 

은 "여섯 번째"열이 비어 :

sR1.["sixth"] 
(* Deedle.MissingValueException: Value at the key sixth is missing 
    at Deedle.Series`2.Get(K key) in C:\code\deedle\src\Deedle\Series.fs:line 311 
    at <StartupCode$FSI_0167>[email protected]() 
Stopped due to error *) 

그래서 누락 된 값을 포함하는 열에 대한 키는 해당 시리즈가 비어 존재하지만. 반면 Frame.denseRows

는 잘 동작하는 것 :
let sR2 = 
    dfR10 
    |> Frame.denseRows 
sR2.Keys 
// keys from 1/1/2013 to 1/5/2013 

그래서 누락 된 값을 포함하는 행의 키는 표시되지 않습니다.

이 두 명령 사이에 비대칭 성이 있으며 Frame.denseCols의 빠른 정보가 잘못되었거나 나 빠졌습니까?

답변

2

Deedle source code에 따르면 : 더 파고

/// We use the terms _sparse_ and _dense_ to denote series that contain some missing values 
/// or do not contain any missing values, respectively. The functions `denseCols` and 
/// `denseRows` return a series that contains only dense columns or rows and all sparse 
/// rows or columns are replaced with a missing value. The `dropSparseCols` and `dropSparseRows` 
/// functions drop these missing values and return a frame with no missing values. 

, denseCols 간단한 전화 frame.ColumnsDense :이 설명 된대로 동작처럼

member frame.ColumnsDense = 
    let newData = data.Select(fun _ vect -> 
     // Assuming that the data has all values - which should be an invariant... 
     let all = rowIndex.Mappings |> Seq.forall (fun (KeyValue(key, addr)) -> vect.Value.GetObject(addr).HasValue) 
     if all then OptionalValue(ObjectSeries(rowIndex, boxVector vect.Value, vectorBuilder, indexBuilder)) 
     else OptionalValue.Missing) 
ColumnSeries(Series(columnIndex, newData, vectorBuilder, indexBuilder)) 

은 나에게 어떤 모습 - 모든 값이 존재하는 경우가 OptionalValue.Missing을 반환 .

+1

Deedle 소스 코드의 텍스트는 행과 열에 대해 대칭입니다. denseRow 및 denseCols의 동작은 대칭이 아닙니다. 예제에서 denseRows는 일부 열에 누락 된 값이 포함 된 행 (및 해당 행 키)을 삭제했습니다. 한편, denseCols는 누락 된 값을 포함하는 열에 해당하는 열 키를 일부 행에 놓지 않았습니다. – Soldalma