在 Julia DataFrames 中测试 NA 的正确方法
Proper way to test for NA in Julia DataFrames
在 Julia DataFrames 包中测试 DataFrame 中的值是否为 NA 的正确方法是什么?
到目前为止我发现 typeof(var) == NAtype
有效,但是有没有更优雅的方法呢?
为此使用 typeof(var) == NAtype
很尴尬,特别是因为它没有矢量化。
测试 NA
值的规范方法是使用名为 isna
.
的(矢量化)函数
例子
让我们生成一个玩具 DataFrame,在 B
列中包含一些 NA
值:
julia> using DataFrames
julia> df = DataFrame(A = 1:10, B = 2:2:20)
10x2 DataFrame
| Row | A | B |
|-----|----|----|
| 1 | 1 | 2 |
| 2 | 2 | 4 |
| 3 | 3 | 6 |
| 4 | 4 | 8 |
| 5 | 5 | 10 |
| 6 | 6 | 12 |
| 7 | 7 | 14 |
| 8 | 8 | 16 |
| 9 | 9 | 18 |
| 10 | 10 | 20 |
julia> df[[1,4,8],symbol("B")] = NA
NA
julia> df
10x2 DataFrame
| Row | A | B |
|-----|----|----|
| 1 | 1 | NA |
| 2 | 2 | 4 |
| 3 | 3 | 6 |
| 4 | 4 | NA |
| 5 | 5 | 10 |
| 6 | 6 | 12 |
| 7 | 7 | 14 |
| 8 | 8 | NA |
| 9 | 9 | 18 |
| 10 | 10 | 20 |
现在让我们假设我们不知道我们的 DataFrame 的内容,并提出例如以下问题:
Does column B
contain an NA
values?
typeof
方法行不通,这里:
julia> typeof(df[:,symbol("B")]) == NAtype
false
isna
功能更充分:
julia> any(isna(df[:,symbol("B")]))
true
在 Julia DataFrames 包中测试 DataFrame 中的值是否为 NA 的正确方法是什么?
到目前为止我发现 typeof(var) == NAtype
有效,但是有没有更优雅的方法呢?
为此使用 typeof(var) == NAtype
很尴尬,特别是因为它没有矢量化。
测试 NA
值的规范方法是使用名为 isna
.
例子
让我们生成一个玩具 DataFrame,在 B
列中包含一些 NA
值:
julia> using DataFrames
julia> df = DataFrame(A = 1:10, B = 2:2:20)
10x2 DataFrame
| Row | A | B |
|-----|----|----|
| 1 | 1 | 2 |
| 2 | 2 | 4 |
| 3 | 3 | 6 |
| 4 | 4 | 8 |
| 5 | 5 | 10 |
| 6 | 6 | 12 |
| 7 | 7 | 14 |
| 8 | 8 | 16 |
| 9 | 9 | 18 |
| 10 | 10 | 20 |
julia> df[[1,4,8],symbol("B")] = NA
NA
julia> df
10x2 DataFrame
| Row | A | B |
|-----|----|----|
| 1 | 1 | NA |
| 2 | 2 | 4 |
| 3 | 3 | 6 |
| 4 | 4 | NA |
| 5 | 5 | 10 |
| 6 | 6 | 12 |
| 7 | 7 | 14 |
| 8 | 8 | NA |
| 9 | 9 | 18 |
| 10 | 10 | 20 |
现在让我们假设我们不知道我们的 DataFrame 的内容,并提出例如以下问题:
Does column
B
contain anNA
values?
typeof
方法行不通,这里:
julia> typeof(df[:,symbol("B")]) == NAtype
false
isna
功能更充分:
julia> any(isna(df[:,symbol("B")]))
true