在Julia DataFrames中测试NA的正确方法

Ske*_*pet 8 dataframe julia

在Julia DataFrames包中测试DataFrame中的值是否为NA的正确方法是什么?

我发现这很typeof(var) == NAtype有效,但有更优雅的方式吗?

jub*_*0bs 10

使用typeof(var) == NAtype它是很尴尬的,特别是因为它没有矢量化.

测试NA值的规范方法是使用被调用的(向量化)函数isna.

让我们生成一个玩具DataFrame,其中包含一些NAB:

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 |
Run Code Online (Sandbox Code Playgroud)

现在让我们假装我们不知道DataFrame的内容,并询问,例如,以下问题:

列是否B包含NA值?

这种typeof方法不起作用,这里:

julia> typeof(df[:,symbol("B")]) == NAtype
false
Run Code Online (Sandbox Code Playgroud)

isna功能较为充足:

julia> any(isna(df[:,symbol("B")]))
  true
Run Code Online (Sandbox Code Playgroud)