在 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